使用 systemd 每天运行一次脚本

Fu8*_*u86 14 cron backup systemd

我想在启动我的机器后 10 分钟运行一个备份脚本,但每天只运行一次。是否可以使用 systemd 构建此类场景?

小智 13

/lib/systemd/system/systemd-tmpfiles-clean.timer::

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Run Code Online (Sandbox Code Playgroud)

这运行相应的 .service在启动后 15 分钟文件,然后每天在系统启动时运行。如果您在同一天重新启动多次,您可以让备份脚本检查存档的 mtime,如果不到一天,则跳过该运行。

此外,如果您的备份将占用大量 IO,那么阅读systemd.exec(5)联机帮助页中的IOScheduling*指令可能会有所帮助。


Krz*_*ski 5

我认为不可能完全在 systemd 中执行此操作,因为它不会跟踪重新启动之间的任何状态。你可以很容易地安排一些东西在启动后运行 10 分钟,使用systemd.timer它的OnBootSec=OnStartupSec=.

脚本本身必须检查它今天是否已经运行。这甚至可以在 bash 中轻松实现,例如:

#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`

[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE
Run Code Online (Sandbox Code Playgroud)