如何在不使用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以获得有关systemdsystemd单元的优秀文档。

您可以使用at运行脚本并将其重新安排为最终指令。 比如像这样:

 $ cat > $HOME/my.job < 

要停止作业,请将其从队列中删除:

 $ atq 5 Wed Nov 2 11:25:00 2016 a zwets $ atrm 5 

或者只是删除文件my.job以便下次执行cat "$HOME/my.job"将会出错,因此不会被调用,并且重新安排也不会发生。