【问题标题】:Linux bash shell script output is different from cronjob vs manually running the scriptLinux bash shell 脚本输出不同于 cronjob 与手动运行脚本
【发布时间】:2015-03-05 05:37:45
【问题描述】:

我编写了一个运行良好的 linux bash shell 脚本,除了我手动运行它时的输出与我从 cronjob 运行它时的输出不同。

具体的命令是lftp:

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

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

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    值得一读:

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-16
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      相关资源
      最近更新 更多