特定の時間にsystemd.serviceを起動/停止

特定の時間にsystemd.serviceを起動/停止

特定の時間にsystemd.serviceを起動して停止したいです。おそらく私はこれを開始するために.timerユニットを使用しますが、組み込みメソッドがありますか?止める一定期間中または一定時間後に作業それとも、実行するには2番目の.timerユニットを作成する必要がありますかstop

ありがとう

答え1

タイマーを使用してサービスAを停止するには、oneshotそのタイプのサービスBを作成します。紛争、タイマーを使用してサービスBを起動します。

あるユニットが別のユニットに衝突=を設定した場合、前者を起動すると後者は停止し、その逆の場合も同様です。 (源泉)

サービス:

[Unit]
Conflicts=B.service
...

B.サービス:

[Unit]
Description=B service description

[Service]
Type=oneshot
ExecStart=/bin/echo ''

B.タイマー:

[Timer]
AccuracySec=1
OnActiveSec=10

[Install]
WantedBy=timers.target

次は、10秒後にサービスAを停止します。

systemctl start A.service
systemctl start B.timer

答え2

利用可能なクローン操作はいくつかあります。

#┌────────────分(0〜59)
 #│┌────────────時間(0 - 23)
 # │ │ ┌────────────────(1~31)
 # │ │ │ ┌──────────────月(1~12)
 # │ │ │ │ ┌──────────────── 曜日(0 - 6)
 #│││││
 #│││││
   * * * * * systemctl start $SERVICE.service
   * * * * * systemctl stop $SERVICE.service

クローンに関する追加情報:https://en.wikipedia.org/wiki/Cronhttps://wiki.archlinux.org/index.php/Cron

答え3

実際には、ファイル内で特定のランタイムを設定した後にサービスを停止する別の方法があります.service

RuntimeMaxSec=...

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

より良い回答を得るには、この珍しい機能を使用する理由を説明したい場合があります。サービスは通常、一定の時間ではなく、永久に実行されるか明示的に停止されるまで実行されます。

関連情報