手动运行 cron 作业/模拟运行 cron 作业?

ste*_*wpf 15 cron

我想在执行任务后测试 cron 的邮件内容和类似的工作。有没有更优雅的方法来测试这个,然后设置一个 cron 作业每隔几秒钟运行一次?那么,有什么方法可以模拟 cron 作业的执行/手动启动 cron 作业,但其行为与 cron 自动运行时的行为相同?

Gil*_*il' 9

在命令行上和在 cron 内部执行 cron 作业的主要区别在于它的环境。其他潜在的差异包括当前目录、终端的可用性以及使用的 shell。

这是通过 cron 运行 cron 作业的相当准确的模拟。为避免 shell 造成的差异,请将您的作业放在一个脚本中,并只在 crontab 中放置该脚本的路径。请注意,cron 传递的环境变量的确切设置和值取决于实现;检查crontab(5)系统上的手册页。ifne是一个命令,如果它接收到一些输入,它就会运行参数中指定的命令;moreutils 中有一个。

env -i HOME="$HOME" LOGNAME="$LOGNAME" PATH=/usr/bin:/bin SHELL=/bin/sh USER="$USER" \
    /path/to/script </dev/null 2>&1 |
ifne mail -r "Cron Daemon" -s "Cron <$USER@$(hostname)> /path/to/script" "$USER"
Run Code Online (Sandbox Code Playgroud)

创建类似 cron 的设置的另一种方法是通过at. 但是at负责使用at进程收到的环境变量运行命令,因此您仍然需要模拟这部分。

echo /path/to/script |
env -i HOME="$HOME" LOGNAME="$LOGNAME" PATH=/usr/bin:/bin SHELL=/bin/sh USER="$USER" \
    at now
Run Code Online (Sandbox Code Playgroud)