systemdを使用して1日1回スクリプトを実行する

systemdを使用して1日1回スクリプトを実行する

コンピュータを起動してから10分後にバックアップスクリプトを実行したいのですが、1日に1回だけ実行したいと思います。 systemdを使用してこれらのシナリオを構築できますか?

答え1

望むより/lib/systemd/system/systemd-tmpfiles-clean.timer::

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

これにより、.service起動後15分後にファイルが実行され、その後、システムの起動時に毎日実行されます。同じ日に複数回再起動する場合は、バックアップスクリプトがアーカイブの実行時間を確認し、1日が経過していない場合は実行をスキップすることができます。

また、バックアップに多くのIOが必要な場合は、次の内容を読むことが役に立ちます。iOSスケジューリング*ガイドラインシステムの実行(5)マンページ。

答え2

再起動間の状態を追跡しないため、systemdはこれを完全に実行することは不可能だと思います。systemd.timerこれを使用するか、OnBootSec=開始から10分後に実行するように簡単にスケジュールできます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

答え3

開始から10分後に途切れがない場合は、次のことができます。

[Unit]
Description=...

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=dailyPersistent=true真夜中ごとに実行するか、少なくとも1つが実行を逃した場合は、起動時に実行してください。

答え4

明らかに、この問題は将来のバージョンで修正される予定です。少なくともによるとこれsystemd-develメーリングリストに電子メールを送信します。それまでは、Krzysztofが提案したハッキン​​グに頼らなければなりません。

関連情報