【问题标题】:shell script to download remote file and launch and other script write in PHP用于下载远程文件并启动的 shell 脚本以及用 PHP 编写的其他脚本
【发布时间】:2010-12-08 09:07:41
【问题描述】:

我制作了一个 shell 脚本,它使用 ftp 协议获取远程文件,如果文件下载良好,它会在 php 中使用 curl 启动另一个脚本。它现在可以正常工作,但我有几个问题需要改进:

  • 脚本是否正在等待下载结束以执行脚本的其余部分?或者在下载脚本期间执行以下指令?
  • 我收到了第一封开始指令的邮件,但没有收到最后一封邮件(得到 curl 结果的邮件,以及脚本末尾的邮件)怎么会?
  • 我想找到一种好方法来禁止脚本多次运行(如果已下载存档),即使它是使用 crontab 每隔几个小时启动一次?
  • 在 ftp 连接结束时退出/再见/按有什么区别?

这是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

【问题讨论】:

    标签: linux shell scripting ftp


    【解决方案1】:

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

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

    我收到了开始的第一封邮件 指令,但绝不是最后的指令 (得到结果的那个 curl 和结尾的那个 脚本)怎么来的?

    看看你的代码:

    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 的时间?

    这可以通过多种方式完成。或许,在成功后将文件名回显到诸如successfully_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 的同义词。

    【讨论】:

    • 如果结果明确,大多数 FTP 客户端允许您省略任何命令的结尾。由于只有一个命令以by 开头,因此假定您的意思是bye
    • 将参数引用到echo 不会受到伤害,花括号也不会受到伤害,但在这种情况下都不需要。我会说 OP 没有收到电子邮件,因为脚本由于某种原因而中止,或者这里的文档有问题。
    【解决方案2】:

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

    USER='admin'
    PASSWD='pass'
    

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

    Linux Journal article howto

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 2014-08-29
      相关资源
      最近更新 更多