Linux bash shell脚本输出与cronjob vs手动运行脚本不同

时间:2015-03-04 21:01:17

标签: linux bash shell

我写了一个linux bash shell脚本,除了我手动运行时输出的效果不同于我从cronjob运行时的输出。

特定命令是lftp

lftp -e "lcd $outgoingpathlocal;mput -O $incomingpathremote *.CSV;exit" -u $FTPUSERNAME,$FTPPASSWORD $FTPSERVER >> ${SCRIPTLOGFILE} 2>&1

当我手动运行脚本时,${SCRIPTLOGFILE}包含很多信息,例如传输了多少文件/字节/等。但是当我从cronjob运行相同的脚本时,除非出现错误(例如无法连接),否则没有输出。我尝试了各种终端输出配置,但没有一个适用于此lftp命令。建议?

1 个答案:

答案 0 :(得分:2)

值得一读:

crontab PATH and USER

特别是,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"