运行类似 cronjob 的
*/15 * * * * sh /home/me/skript.sh >> /home/me/out.log 2>&1
每 15 分钟执行一次skript.sh
。12:10 启动计算机,我必须等待 5 分钟。
有没有办法让 cronjob 在重启后立即启动,然后每 15 分钟启动一次?
谢谢,马丁
答案1
systemd 来救援
这是不可能的,cron
但systemd
可以做到。您需要创建两个 systemd 单元,一个用于启动脚本,一个用于计时器。
文件/etc/systemd/system/my-fifteen-minutes.timer
:
[Unit]
Description=15 minute timer
[Timer]
# start this 0 minutes after boot:
OnBootSec=0 min
# ... and then every 15 minutes:
OnActiveSec=15 min
[Install]
WantedBy=multi-user.target
文件/etc/systemd/system/my-fifteen-minutes.service
(注意不同的扩展名):
[Unit]
Description=My script
[Service]
Type=oneshot
ExecStart=/bin/sh -c "/home/me/skript.sh >> /home/me/out.log 2>&1"
User=me
将这些文件放入目录中/etc/systemd/system
,然后使用以下命令启用计时器
# make systemd aware of them
sudo systemctl daemon-reload
# make sure the timer is engaged at startup
sudo systemctl enable my-fifteen-minutes.timer
# start the timer "now" (without rebooting):
sudo systemctl start my-fifteen-minutes.timer
# examine the status:
systemctl status my-fifteen-minutes.timer my-fifteen-minutes.service
命令systemctl status my-fifteen-minutes.timer
将显示类似
● my-fifteen-minutes.timer - 15 minute timer
Loaded: loaded (/etc/systemd/system/my-fifteen-minutes.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Sun 2018-07-01 14:42:05 CEST; 1s ago
Trigger: Sun 2018-07-01 14:57:05 CEST; 14min left
Jul 01 14:42:05 stratum9 systemd[1]: Started 15 minute timer.
这意味着:计时器已触发1s ago
并将在约 14 分钟后再次触发(于“2018-07-01 星期日 14:57:05 CEST”)。
请注意计时器和服务是两个不同的东西,你需要同时定义它们。默认情况下,定时器单元开始服务单位具有相同名称(扩展名除外.timer
)service
,iefoo.timer
将控制foo.service
(但您可以覆盖它)。定时器单元只是定义什么时候发生了一些事情服务单位,以及服务单位定义实际操作(在您的情况下:启动脚本/home/me/skript.sh
)。
进一步阅读: