我正在使用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
时这里发生了什么吗?
cron 的默认行为是通过电子邮件向运行 cronjob 的用户发送 stderr。
从man cron
:
执行命令时,任何输出都会邮寄给 crontab(或在 MAILTO 环境中指定的用户 变量,如果存在)。
为了规避这种行为,您确实可以像尝试的那样重定向 stderr。但是,它需要一些额外的调整。
如从 Cron重定向带有日期的 stderr 到日志文件中所示,您可以使用子 shell 将 stderr 重定向到 stdin,然后正常重定向所有内容:(cron expression 2>&1) > /your/log/file
。在您的情况下:
0 10 * * * (/bin/bash /path/myscript.sh 2>&1) >/path/log