Bash 重定向在 Cron 中不起作用

Bash 重定向在 Cron 中不起作用

我尝试&>>在 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以了解详情。

相关内容