特定の時間にsystemd.serviceを開始および停止したい。おそらく私は.timerユニットを使用してジョブを開始しますが、stopに組み込まれた方法はありますか? 、または特定の時間、またはstop
を実行する2番目の.timerユニットを作成する必要がありますか?
ありがとう
タイマーを使ってサービスAを停止するには、conflictとなるタイプoneshot
のサービスBを作成し、次にタイマーを使用してサービスBを開始します。
ユニットに別のユニットのConflicts =設定がある場合、前者を開始すると後者が停止し、逆も同様です。 ( ソース )
サービス:
[Unit]
Conflicts=B.service
...
B.service:
[Unit]
Description=B service description
[Service]
Type=oneshot
ExecStart=/bin/echo ''
タイマー:
[Timer]
AccuracySec=1
OnActiveSec=10
[Install]
WantedBy=timers.target
以下は、10秒後にサービスAを停止します。
systemctl start A.service
systemctl start B.timer
いくつかのcronジョブを使用できます。
#┌─────────────分(0-59) #│┌──────────────時間( 0-23) #│││───────────────月の日(1-31) #│││┌──── ────────────月(1-12) #││││┌─────────────────曜日( 0-6) #│││││ #│││││ * * * * * systemctl start $ SERVICE.service * * * * * systemctl stop $ SERVICE.service
Cronの詳細情報: https://en.wikipedia.org/wiki/Cron 、 https://wiki.archlinux.org/index.php/Cron
実際、.service
ファイルで構成された特定のランタイムの後でサービスを停止する別の方法があります。
RuntimeMaxSec=...
サービスが失敗したと見なされるという事実は気に入らないかもしれませんが、それは長期実行サービスを強制終了したことの多かれ少なかれ論理的な結果です。
より良い答えを得るには、このような珍しい機能を使用する根拠を説明する必要があります。サービスは通常、一定時間だけでなく、永久に、または明示的に停止されるまで実行されることを意図しています。