如何像 crontab 那样定期执行脚本但不使用 crontab?
请注意,执行的脚本不应与另一个脚本一起触发并使用“睡眠”命令对其进行调度,我希望它具有与 crontab 相同的功能,但它不应出现在 crontab 列表中,也不应在终端或会话结束时停止,
crontab 完全但不croning 它。
现代选择是使用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获得关于systemd和systemd一般单位的优秀文档。