[Unit]
Description=run test service
[Timer]
OnCalendar=Sat *-*-* 00:00:01
Unit=test.service
Persistent=true
[Install]
WantedBy=timers.target
上記の例では、すべて正常に動作します。ただし、午前 10 時までに Linux OS システムを起動する必要があります。
私の目標は: 毎週土曜日の任意の時間に Debian 10 を起動し、起動中にスクリプトを実行したいと考えています。土曜日 (同じ日) に Linux マシンを 2 回または 3 回再起動した場合、スクリプトを再度実行するのではなく、1 回だけ実行したいです。systemd でそれが可能ですか?
私のGnu-Linux OSはDebian GNU/Linux 10 (バスター)そしてsystemctl --versionはシステムド241 (241)
答え1
「Linux OS」は一般的すぎる特定のシステムを診断できるようにします。次の 4 つのコマンドを実行し、結果を報告してください (コマンドが利用できない場合はエラーも含む)。レポートには、インストールされている「linux os」の種類と、実行されている systemd のバージョンが示されます。
lsb_release -a
systemctl --version
/sbin/init --version
busctl --system get-property org.freedesktop.systemd1 \
/org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager \
Version
現在の(2019年8月時点)バージョンのsystemdでは
リアルタイムタイマーを土曜日の任意の時間に起動するように設定します
OnCalendar=Sat *-*-* 00:00:01
モノリシックタイマーを削除します
OnBootSec=2
の効果
Persistent=true
システムは毎週土曜日の 00:00:01 以降に、週に 1 回スクリプトを実行しようとします。スクリプトは毎週土曜日に 1 回だけ実行され、通常は初回起動時に実行されます。土曜日にシステムがオンになっていなかった場合、スクリプトは週の他の曜日に実行され、金曜日の夜通しシステムが放置されていた場合は、00:00:01 に実行されます。
- http://manpages.ubuntu.com/manpages/xenial/man5/systemd.timer.5.html
- https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd.timer.5
永続的=
ブール引数を取ります。true の場合、サービス ユニットが最後にトリガーされた時刻がディスクに保存されます。タイマーがアクティブになると、タイマーが非アクティブだった間にサービス ユニットが少なくとも 1 回トリガーされていた場合、サービス ユニットは直ちにトリガーされます。これは、マシンがオフのときにサービスの実行を逃した場合に役立ちます。この設定は、OnCalendar= で構成されたタイマーにのみ影響することに注意してください。デフォルトは false です。