用于下载远程文件和启动的shell脚本以及用PHP编写的其他脚本

时间:2010-12-08 09:07:41

标签: linux shell scripting ftp

我制作了一个使用ftp协议获取远程文件的shell脚本,如果文件下载得很好,它会在php中使用curl启动另一个脚本。它现在有点工作但我还有一些问题需要改进:

  • 脚本是否在等待下载结束以执行脚本的其余部分?或者在下载脚本期间执行以下指示?
  • 我收到了第一封开始教学的邮件,但从未收到最后一封邮件(获得卷曲结果的那封邮件,以及脚本末尾的那封邮件)是怎么来的?
  • 我想找到一个很好的方法来禁止脚本多次运行(如果已经下载了存档),即使它是用crontab每小时启动一次?
  • 在ftp连接结束时quit / bye / by之间的区别是什么?

这是shell脚本:

echo start of the script | mail -s "beginning of the script"  krifur@krifur.com

cd /my_rep

HOST='domaine.com'
PORT='21'
USER='admin'
PASSWD='pass'

jour=$(date "+%Y%m%d")
FILE="file_"$jour".txt";

ftp -i -n $HOST $PORT <<EOF
quote USER $USER
quote PASS $PASSWD
cd firstlevel
cd end

get $FILE
quit
EOF

if test -f $FILE
then
    CurlRes="$(curl "http://doma.com/myfile.php")"

    echo debug  CURL : $CurlRes | mail -s "debug"  krifur@krifur.com

else
    echo no file : $FILE | mail -s "no file"  krifur@krifur.com
fi

echo this is the end of the script download | mail -s "end of script download"   krifur@krifur.com

2 个答案:

答案 0 :(得分:0)

  

脚本是否正在等待结束   下载执行其余的   脚本?或者在期间   下载脚本执行以下操作   说明?

如果您的意思是“FTP命令会阻止直到完成吗?”答案是肯定的。

  

我收到了第一封邮件   指导,但从来没有最后的   (获得结果的人   卷曲,和最后的那个   脚本)怎么来的?

看看你的代码:

then
    CurlRes="$(curl "http://doma.com/myfile.php")"

    echo debug  CURL : $CurlRes | mail -s "debug"  krifur@krifur.com

else
    echo no file : $FILE | mail -s "no file"  krifur@krifur.com
fi

$ CurlRes和$ FILE的内容分别是什么?试试$ {CurlRes}和$ {FILE}。我还建议在使用echo时引用字符串。

垃圾邮件过滤器很可能不喜欢这条消息,你有没有检查过它?

  

我想找个好方法   禁止脚本运行更多   而不是一次(如果存档已经存在   即使是每次发布都会下载)   用crontab小时?

这可以通过多种方式完成。也许,成功将文件名回显到success_downloaded.txt之类的底部,然后使用grep查看文件名是否在列表中。根据用途,该文件可能会变得相当大..所以我也实现了一些旋转它的方法。

来自男人(3)ftp

bye         Terminate the FTP session with the remote server and exit ftp.
            An end of file will also terminate the session and exit.


quit        A synonym for bye.
据我所知,

by也是bye的同义词。

答案 1 :(得分:0)

应该不惜一切代价避免这种情况:

USER='admin'
PASSWD='pass'

使用ssh的scp键(不需要密码提示):

Linux Journal article howto