如何在不使用crontab的情况下定期执行脚本?
如何像crontab那样定期执行脚本但不使用crontab?
请注意,执行的脚本不应该使用另一个脚本触发并使用’sleep’命令进行调度,我希望它具有与crontab相同的function,但它不应该存在于crontab列表中,并且不应该在终端或会话结束时停止,
crontab确切但没有croning它。
现代选项是使用systemd
计时器单元。 这需要创建一个systemd
单元,用于定义要定期运行的作业,以及一个systemd.timer
单元,用于定义作业的计划。
假设您要以普通用户身份运行作业,请将这些文件放在$HOME/.config/systemd/user
:
我-job.service
[Unit] Description=Job that needs periodic execution [Service] ExecStart=/path/to/your/script
我-job.timer
[Unit] Description=Timer that periodically triggers my-job.service [Timer] OnCalendar=minutely
然后启用新创建的单元,并启动计时器:
$ systemctl --user enable my-job.service my-job.timer $ systemctl --user start my-job.timer
要validation计时器是否已设置:
$ 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
journalctl -xe
应显示正在运行的作业的日志条目。
有关配置计时器行为的许多选项(包括随机启动,唤醒计算机,停机时间,持续时间,计时器准确度等),请参阅man systemd.timer
,以及man systemd.unit
以获得有关systemd
和systemd
单元的优秀文档。
您可以使用at
运行脚本并将其重新安排为最终指令。 比如像这样:
$ cat > $HOME/my.job <
要停止作业,请将其从队列中删除:
$ atq 5 Wed Nov 2 11:25:00 2016 a zwets $ atrm 5
或者只是删除文件my.job
以便下次执行cat "$HOME/my.job"
将会出错,因此不会被调用,并且重新安排也不会发生。