我尝试&>>
在 cron 作业中重定向 STDOUT 和 STDERR,但在日志文件中看不到任何内容。第一次运行时会创建该文件,但没有 OUT 或 ERR。
当我直接运行带有重定向的命令时&>>
,它可以按预期工作。
我可以成功地使用重定向输出... >> /tmp/log 2>&1
,但根据此 GNU 页面(3.6.5),这两种方法是等效的,所以我不确定为什么第一种方法不起作用。
知道我这里遗漏了什么吗?
代码示例:
#
# test.bash
#
echo "OUT"
ecko "ERR"
#
# crontab
#
* * * * * /bin/bash /root/test.bash &>> /tmp/test_log_1 # NOT WORKING
* * * * * /bin/bash /root/test.bash >> /tmp/test_log_2 2>&1 # WORKING
#
# using redirect directly works as expected
#
$ /bin/bash /root/test.bash &>> /tmp/test_log_3
$ /bin/bash /root/test.bash &>> /tmp/test_log_3
$ cat /tmp/test_log_3
OUT
/root/test.bash: line 2: ecko: command not found
OUT
/root/test.bash: line 2: ecko: command not found
系统详细信息:
- Ubuntu 20.04.4 LTS
- Bash 5.0.17
- Cron 3.0pl1-136ubuntu1
答案1
Cron/bin/sh
默认使用 来解释作业条目,它不支持&>>
重定向语法。
如果您希望作业在不同的 shell 中运行,您可以SHELL
在 crontab 中设置变量:
SHELL=/bin/bash
* * * * * /bin/bash /root/test.bash &>> /tmp/test_log_1
请参阅man 5 crontab
以了解详情。