Systemdタイマーは、スケジュールされたサービスを1回ではなく2回連続して実行します。

Systemdタイマーは、スケジュールされたサービスを1回ではなく2回連続して実行します。

40分ごとに実行する必要があるnodejs GUIプログラム(ユーザー対話は必要ありません)があります。午後5時40分、午後6時40分、午後7時40分などで実行されるとします。 Debian サーバーで次のコマンドを使用して systemd タイマーを有効にしました。

systemctl --user enable my_program.timer

問題は、スケジュールが所定の時間に開始され、正常に完了することです。ただし、プログラムはすぐに再起動され、正常に完了します。

ショーが午後5時40分に始まり、午後5時45分に終わるとしましょう。約1分後、たとえば午後5時46分にプログラムが再起動して終了します。その後、次回の午後6時40分にこのようなことが再び発生します。

これは時間ごとに発生します。また、そのユーザーアカウントでログインしてサーバーを再起動すると、5分待たずにすぐにプログラムが起動します。

  1. 2番目の自動実行を停止する方法は?
  2. 5分後に強制的に再起動するには?

コンテンツ/home/user/schedule.sh

#! /usr/bin/bash
cd /home/user/my_program && DISPLAY=:0 /usr/bin/node ./index.js

コンテンツ/home/user/.config/systemd/user/my_program.service

[Unit]
Description=My Program

[Service]
ExecStart=/home/user/schedule.sh

コンテンツ/home/user/.config/systemd/user/my_program.timer

[Unit]
Description=My Program Timer
Requires=my_program.service

[Timer]
Unit=my_program.service
OnCalendar=*-*-* *:40:*
OnBootSec=5 minutes

[Install]
WantedBy=timers.target

ベストアンサー1

ここでは、1つの問題、つまり毎時間実行される繰り返し実行に集中します。次の構文を使用しました。

OnCalendar=*-*-* *:40:*

秒のワイルドカード表現は、man systemd.time毎時間40分の毎秒と一致します。カレンダーサブコマンドを含むツールを使用してsystemd-analyzeそれらを確認できます。

systemd-analyze calendar --iterations=5 "*-*-* *:40:*"
Normalized form: *-*-* *:40:*
    Next elapse: Thu 2020-12-17 17:40:00 EST
       (in UTC): Thu 2020-12-17 22:40:00 UTC
       From now: 15min left
       Iter. #2: Thu 2020-12-17 17:40:01 EST
       (in UTC): Thu 2020-12-17 22:40:01 UTC
       From now: 15min left
       Iter. #3: Thu 2020-12-17 17:40:02 EST
       (in UTC): Thu 2020-12-17 22:40:02 UTC
       From now: 15min left
       Iter. #4: Thu 2020-12-17 17:40:03 EST
       (in UTC): Thu 2020-12-17 22:40:03 UTC
       From now: 15min left
       Iter. #5: Thu 2020-12-17 17:40:04 EST
       (in UTC): Thu 2020-12-17 22:40:04 UTC
       From now: 15min left

だからこれは問題です。

Requires=2番目の問題は、タイマーに含めたことです。man systed.unitこのディレクティブのドキュメントには、次Requires=のように記載されています。

このユニットがアクティブになると、[In Requires =]にリストされているユニットもアクティブになります。

その結果、ターゲットサービスが2番目にロードされる可能性があります。

時間に関する新しい質問を提起するOnBootSec=のは別の質問です。

おすすめ記事