web-dev-qa-db-ja.com

特定の時間にsystemd.serviceを開始/停止する

特定の時間にsystemd.serviceを開始および停止したい。おそらく私は.timerユニットを使用してジョブを開始しますが、stopに組み込まれた方法はありますか? 、または特定の時間、またはstopを実行する2番目の.timerユニットを作成する必要がありますか?

ありがとう

15
Jamie Kitson

タイマーを使ってサービス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
6
Radivarig

いくつかの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/Cronhttps://wiki.archlinux.org/index.php/Cron

3
John Moon

実際、.serviceファイルで構成された特定のランタイムの後でサービスを停止する別の方法があります。

RuntimeMaxSec=...

サービスが失敗したと見なされるという事実は気に入らないかもしれませんが、それは長期実行サービスを強制終了したことの多かれ少なかれ論理的な結果です。

より良い答えを得るには、このような珍しい機能を使用する根拠を説明する必要があります。サービスは通常、一定時間だけでなく、永久に、または明示的に停止されるまで実行されることを意図しています。

2
Pavel Šimerda