スクリプトを実行する次のシステム 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
機能します。