我写了一个linux bash shell脚本,除了我手动运行时输出的效果不同于我从cronjob运行时的输出。
特定命令是lftp
:
lftp -e "lcd $outgoingpathlocal;mput -O $incomingpathremote *.CSV;exit" -u $FTPUSERNAME,$FTPPASSWORD $FTPSERVER >> ${SCRIPTLOGFILE} 2>&1
当我手动运行脚本时,${SCRIPTLOGFILE}
包含很多信息,例如传输了多少文件/字节/等。但是当我从cronjob运行相同的脚本时,除非出现错误(例如无法连接),否则没有输出。我尝试了各种终端输出配置,但没有一个适用于此lftp
命令。建议?
答案 0 :(得分:2)
值得一读:
特别是,cron不会将您用于交互式shell的相同环境变量设置为。
您可能希望将整个cron作业包装在一个脚本中,然后您可以暂时添加一些代码,如export >> scriptenvironment.txt
,并查看cron调用脚本与交互式调用之间的区别脚本。
请尝试man 5 crontab
了解详情。
一旦您知道脚本运行所需的环境变量,您可以根据需要在crontab中设置它们,或者在您自己的脚本开头设置它们。
EXAMPLE CRON FILE
# use /bin/sh to run commands, overriding the default set by cron
SHELL=/bin/sh
# mail any output to `paul', no matter whose crontab this is
MAILTO=paul
#
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 2:15pm on the first of every month -- output mailed to paul
15 14 1 * * $HOME/bin/monthly
# run at 10 pm on weekdays, annoy Joe
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
5 4 * * sun echo "run at 5 after 4 every sunday"