测试运行cron条目

Kar*_*k S 33 unix linux cron crontab

我最近添加了一个cron作业,但是在给出命令的同时在路径上犯了一个错误,因此,工作从未成功.有没有办法测试我们所做的cron更改?

请注意,我确实从命令行复制并粘贴了命令,这只是一个导致这种情况的迷路按键.

Mar*_*sen 46

当我想测试我的cron作业时,我通常将间隔设置得非常低,并密切监视日志.当我确信输入正确时,我将间隔设置回一个合理的值.

例如,每两分钟运行一次作业:

*/2 * * * * echo "Hello World"

我运行tail -f我的日志文件(/var/log/syslog在debian上).

  • 这也是我做的,除了一分钟......但我希望有一种方法可以让crontab用命令运行它,这样就不必总是等待一分钟,直到crontab执行命令,只是为了看它是否会运行. (7认同)
  • 最接近的方法是运行“/bin/sh”。话又说回来,您不应该直接从 cron 运行复杂的命令。请改用外部脚本! (2认同)
  • 确切地说,所以当/ bin/sh运行但不是cron作业时,调试它会非常令人沮丧,即使它只是等待40-50秒来查看它是否可以工作. (2认同)
  • 特殊情况的小附录:如果您运行的命令很少生成输出(例如“git fetch”)并且它是用户 cron 作业,因此您无权访问 /var/log/syslog,您可以做一些事情像这样确保你得到你可以检查的输出:`date >> git.log && git --git-dir=~/foo fetch >> git.log 2>&1` (2认同)

Jos*_*hua 29

这个问题也在serverfault上被提出并且已经获得了一些额外的答案

以下是Marco解决方案的解释版本:(不确定最佳ediquite是否仅提供链接答案或不复制别人的解决方案)

使用临时cron条目创建环境文件

* * * * *  /usr/bin/env > /home/username/cron-env
Run Code Online (Sandbox Code Playgroud)

然后创建一个shell脚本run-as-cron,该脚本使用该环境执行命令.

#!/bin/sh

. "$1"
exec /usr/bin/env -i "$SHELL" -c ". $1; $2"
Run Code Online (Sandbox Code Playgroud)

给它执行权限

chmod +x run-as-cron
Run Code Online (Sandbox Code Playgroud)

然后它就像这样使用:

./run-as-cron <cron-environment> <command>
Run Code Online (Sandbox Code Playgroud)

例如

./run-as-cron /home/username/cron-env 'echo $PATH'
Run Code Online (Sandbox Code Playgroud)


Fuu*_*uhi 6

约书亚的回答对我不起作用.两个问题:

  • cron-env文件中的变量不会导出(set -a需要).

  • 脚本仍与当前tty(setsid必需)绑定.

脚本run-as-cron应该是

#!/bin/sh

. "$1"
exec setsid /usr/bin/env -i "$SHELL" -c "set -a; . $1; $2" </dev/null
Run Code Online (Sandbox Code Playgroud)

没有足够的代表来修复他的答案或添加评论......