.timer 単位を使用して systemd .service を再起動します。

.timer 単位を使用して systemd .service を再起動します。

スクリプトを実行する次のシステム myscript.service ユニットがあります。

[Unit]
Description=MyScript
Wants=time-sync.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/bin/test.sh -a
ExecStop=/usr/local/bin/test.sh -b

[Install]
WantedBy=multi-user.target

次のSystemd myscript.timerデバイスを使用して毎分再起動したいと思います。

[Unit]
Description=Schedule script execution

[Timer]
OnCalendar=*:0/1

[Install]
WantedBy=timers.target

最初にのみ機能し、それ以降はn / a状態のままです。

# systemctl list-timers
NEXT                         LEFT        LAST                         PASSED      UNIT                         ACTIVATES
n/a                          n/a         Tue 2019-10-15 14:50:01 EDT  3ms ago     myscript.timer               myscript.service

~

答え1

.service 単位が .timer 単位で実行される場合、RemainAfterExit=true.this を持つことはできません。システム文書話す:

タイマーの有効期限が切れたときにアクティブにするデバイスがすでにアクティブになっている場合、デバイスは再起動せずに実行を続けます。この場合、新しいサービスインスタンスを作成するという概念はありません。したがって、RemainAfterExit =が設定されているサービス(サービスの基本プロセスが終了しても持続します)は、通常、繰り返しタイマーを介したアクティブ化には適していません。一度だけアクティブになってから永遠に続くからです。

したがって、削除するとRemainAfterExit=true機能します。

関連情報