如何在不使用 crontab 的情况下定期执行脚本?

αғs*_*нιη 3 command-line cron

如何像 crontab 那样定期执行脚本但不使用 crontab?

请注意,执行的脚本不应与另一个脚本一起触发并使用“睡眠”命令对其进行调度,我希望它具有与 crontab 相同的功能,但它不应出现在 crontab 列表中,也不应在终端或会话结束时停止,

crontab 完全但不croning 它。

zwe*_*ets 6

现代选择是使用systemd计时器单元。这需要创建一个systemd定义要定期运行的作业的systemd.timer单元,以及一个定义作业计划的单元。

假设您想以普通用户身份运行该作业,请将这些文件放入$HOME/.config/systemd/user

我的工作服务

[Unit]
Description=Job that needs periodic execution

[Service]
ExecStart=/path/to/your/script
Run Code Online (Sandbox Code Playgroud)

我的工作.timer

[Unit]
Description=Timer that periodically triggers my-job.service

[Timer]
OnCalendar=minutely
Run Code Online (Sandbox Code Playgroud)

然后启用新创建的单元,并启动计时器:

$ systemctl --user enable my-job.service my-job.timer
$ systemctl --user start my-job.timer
Run Code Online (Sandbox Code Playgroud)

要验证计时器是否已设置:

$ systemctl --user list-timers
NEXT                         LEFT     LAST                         PASSED UNIT         ACTIVATES
Wed 2016-11-02 14:07:00 EAT  19s left Wed 2016-11-02 14:06:37 EAT  3s ago my-job.timer my-job.service
Run Code Online (Sandbox Code Playgroud)

journalctl -xe 应该显示正在运行的作业的日志条目。

man systemd.timer有关配置计时器行为的许多选项(包括随机启动、唤醒计算机、停机期间的持久性、计时器准确性等),请参阅参考资料,以man systemd.unit获得关于systemdsystemd一般单位的优秀文档。