我有一个脚本,从提示符工作得很好,但不是从crontab。唯一被破坏的是在脚本的子shell中忽略的这里文档。脚本使用psftp。下面是代码:
/home/批/myscript.sh:
(
cd /home/downloaded/csv/
psftp -pw passw0rd -P 1234 user@someftp.com << EOF
cd outgoing
mget *.csv
EOF
) | tee /home/batch/logs/mylog.log | mail -s "Mail subject" "me@mycompany.com"
crontab - e:
45 10 * * * /bin/sh /home/batch/myscript.sh
OK -从提示符启动邮件:
Remote working directory is /
psftp> Remote directory is now /outgoing
psftp> *.csv: nothing matched
psftp> quit
KO -邮件从crontab启动:
Remote working directory is /
psftp> quit
Google没有提供很多帮助。我已经尝试了几种EOF语法,因为它似乎是这里文档的常见问题,但我不认为它来自于此。它可能与某种嵌套级别有关的crontab,有这样的事情吗?
好了,问题解决了:
crontab用于执行脚本的用户不同。发生的事情是sftp的密钥没有为这个用户注册。这将导致一个提示,要求注册密钥,我的脚本没有回答。
我以它使用的用户身份连接,psftp并注册密钥