我正在使用crontab -e
在我没有root权限的计算机上设置cron作业。
crontab中的初始命令是这样的:
0 10 * * * /bin/bash /path/myscript.sh >/path/log
我发现脚本没有运行,因为系统创建了一个空的日志文件。然后我在上面的命令末尾添加2>&1
:
0 10 * * * /bin/bash /path/myscript.sh >/path/log 2>&1
并尝试找到任何错误。奇怪的是,通过添加2>&1
,cron甚至没有创建一个空的日志文件。什么都没有。
在添加2>&1
?
答案 0 :(得分:3)
cron的默认行为是通过电子邮件将stderr发送给运行cronjob的用户。
来自man cron
:
执行命令时,任何输出都会邮寄给所有者 crontab(或MAILTO环境中指定的用户) crontab中的变量,如果存在的话。)
要实现此行为,您确实可以像尝试一样重定向stderr。但是,它需要一些额外的调整。
如Redirect stderr with date to log file from Cron所示,您可以使用子shell将stderr重定向到stdin,然后正常重定向所有内容:(cron expression 2>&1) > /your/log/file
。在你的情况下:
0 10 * * * (/bin/bash /path/myscript.sh 2>&1) >/path/log