脚本的 stdout 和 stderr 在由 cron 执行时不会被重定向

脚本的 stdout 和 stderr 在由 cron 执行时不会被重定向

./script &>> log.txt

我得到了一个很好的日志文件,但如果我让 cron 执行相同的命令,那么 crontab 看起来如下:

* * * * * '/home/user/script &>> /home/user/log.txt'

log.txt 将只是空的,我尝试了“和'和`并且没有勾选来括住命令,知道为什么流不会写入文件吗?

答案1

有可能 cron 使用的 shell 不支持&>>Bash 支持的简写重定向运算符。

您应该使用 Bourne shell 和其他程序支持的便携形式:

* * * * * /home/user/script >> /home/user/log.txt 2>&1

这表示“将标准输出(文件描述符 1)附加到文件并将标准错误(文件描述符 2)发送到同一位置”。

而且您不需要任何引号。

答案2

  1. 不要在 crontab 中的命令中包含任何引号。

  2. 考虑运行执行其自身重定向的环境设置脚本,而不是依赖 cron 来执行此操作。

根据我的经验,crontab 文件中的内容越少越好。我的 crontab 文件由时间控制加上一个简单的绝对命令名称 (ksh) 和要运行的命令组成:

#   @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
#   Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min     Hour    Day     Month   Weekday Command
#-----------------------------------------------------------------------------
0        *       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1        1       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23       1       *       *       1-5     /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2        3       *       *       0       /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21       3       1       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/monthly

相关内容