手动运行一个cron作业,并立即

(我已经读过如何测试一个新的cron脚本?。)

我有一个具体的问题(cron job似乎没有运行,或者没有正常运行),但这个问题很普遍。我想调试那些被编排的脚本。 我知道我可以设置一个 * crontab行,但这并不是一个完全令人满意的解决方案。 我希望能够从命令行中运行一个cron作业,就像cron在运行它一样(同样的用户,同样的环境变量,等等)。 有什么办法可以做到这一点吗? 必须等待60秒来测试脚本的变化是不现实的。

在我看到的大多数默认的cron守护程序中,根本没有办法告诉cron现在就在这里运行。如果你使用anacron,我想有可能在前台运行一个单独的实例。

如果你的脚本不能正常运行,那么你就没有考虑到这点。

  • 脚本是作为一个特定的用户运行的
  • cron有一个受限的环境(最明显的表现是路径不同)。

从crontab(5)来看。

有几个环境变量是 由cron(8)自动设置的 守护程序设置的。 SHELL被设置为/bin/sh,而 LOGNAME和HOME是由 /etc/passwd行的crontab的 所有者。PATH被设置为"/usr/bin:/bin"。 HOME、SHELL和PATH可能被 中的设置来覆盖。 crontab;LOGNAME是指作业运行的用户。 作业运行的用户,并且不能被 改变。

一般来说,PATH是最大的问题,所以你需要。

  • 在测试时,在脚本中明确地将PATH设置为/usr/bin:/bin。你可以在bash中用export PATH="/usr/bin:/bin"来做这个。
  • 例如,PATH="/usr/bin:/bin:/usr/local/bin:/usr/sbin:/sbin&quot.在crontab的顶部明确设置你想要的正确PATH。

如果你需要以其他没有shell的用户(例如www-data)的身份运行脚本,请使用sudo。

sudo -u www-data /path/to/crontab-script.sh

当然,在所有这些之前,首先要测试的是你的脚本是否真的能从命令行中完成它应该做的事情。如果你不能从命令行中运行它,它显然就不能从cron中运行。

评论(2)

嗯,用户与你放在crontab条目中的用户是一样的(或者你把它放在谁的crontab中,也可以说是一样的),所以这没有什么问题。 crontab(5)应该给你设置的环境变量列表,只有几个。

评论(2)

我从来没有找到手动运行cron job的方法,但篇文章建议设置与cronjob相同的环境,并手动运行脚本。

评论(2)