2010-12-08 79 views
1

我做了一个shell脚本,获得一个远程文件与ftp协议,如果该文件很好的下载,它启动另一个脚本在PHP与curl.It是一种现在的工作,但我必须提高几个问题:?shell脚本下载远程文件和启动和其他脚本写在PHP

  • 执行脚本正在等待下载结束执行脚本的其余部分中下载的时间脚本执行下列指令或?
  • 我收到开始指令的第一封邮件,但从来没有最后一封(得到卷曲结果的那个,以及脚本末尾的那个)怎么回事?
  • 我想找到一种很好的方式来禁止脚本运行多次(如果归档文件已经下载),即使它每小时都会用crontab启动吗?
  • 在ftp连接结束时quit/bye/by有什么区别?

这是shell脚本:

echo start of the script | mail -s "beginning of the script" [email protected] 

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" [email protected] 

else 
    echo no file : $FILE | mail -s "no file" [email protected] 
fi 

echo this is the end of the script download | mail -s "end of script download" [email protected] 

回答

0

执行脚本等待 下载结束时执行的 脚本休息期间的 时间或下载脚本请执行以下 指示?

如果您的意思是“请问FTP命令块是否完成?” ,答案是肯定的。

我收到开头 指令的第一封邮件,但从来没有在最后的 (就是那个获得 卷曲的结果,和一个在 脚本结束)怎么来的?

你的代码看看:

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

    echo debug CURL : $CurlRes | mail -s "debug" [email protected] 

else 
    echo no file : $FILE | mail -s "no file" [email protected] 
fi 

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

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

我想找到 一个很好的方式禁止脚本运行不止一次 (如果档案已经 下载),即使是推出每 小时的crontab?

这可以通过多种方式完成。也许,一旦成功,将文件名称回传到诸如successful_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的代名词,据我所知。

+0

大多数FTP客户端,您可以省略任何结束命令如果结果是明确的。由于只有一个命令以`by`开头,因此推测你的意思是`bye`。 – Sorpigal 2010-12-08 11:12:56

+0

引用“echo”的参数不会受到伤害,大括号也不会受到伤害,但在这种情况下,这两者都不是必需的。我会说OP没有收到电子邮件,因为脚本因某种原因中止了,或者这里的文档有问题。 – 2010-12-08 15:41:12