システムサービスタイマーが機能していません。

システムサービスタイマーが機能していません。

毎時間スクリプトを実行するタイマーを使用してシステムサービスを作成しましたが、そうではありません。

% cat /etc/systemd/system/myservice.service
[Unit]
Description=Run script after network established
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart="/srv/script"

[Install]
WantedBy=multi-user.target

% cat /etc/systemd/system/myservice.timer
[Unit]
Description=Run script every hour

[Timer]
OnBootSec=15min
OnUnitActiveSec=1h

[Install]
WantedBy=timers.target

ネットワークの設定後にスクリプトを実行しますが、それ以降は毎時間実行されません。

sudo systemctl status myservice.{service,timer}

...両方とactiveイムを示していますenabled

時間ファイルがサービスファイルを参照するようにするにはどうすればよいですか?


追加情報:

% systemctl list-timers --system --all
NEXT                        LEFT         LAST                        PASSED       UNIT                         ACTIVATES
~~~~~~~~~~~~~~~~
Sun 2023-09-24 03:10:54 BST 3 days left  Sun 2023-09-17 03:10:50 BST 3 days ago   e2scrub_all.timer            e2scrub_all.service
-                           -            -                           -            fstrim.timer                 fstrim.service
-                           -            Wed 2023-09-20 17:28:10 BST 2h 27min ago myservice.timer              myservice.service

答え1

man systemd.timer説明する:

タイマーの有効期限が切れたときにアクティブにするデバイスがすでにアクティブになっている場合、デバイスは再起動せずに実行を続けます。この場合、新しいサービスインスタンスを作成するという概念はありません。したがって、RemainAfterExit=セットを持つサービス(サービスの基本プロセスが終了した後も持続します)は、通常、繰り返しタイマーによるアクティブ化には適していません。なぜなら、サービスは一度だけアクティブになり、永遠に続くからです。

これにより、操作が完了した後もRemainAfterExit=yesサービスはアクティブのままになります。サービスが有効になっているため、タイマーは他のインスタンスを作成しません。active/srv/script

答えはおそらく削除ですRemainAfterExit=yes。タイマーにジョブを実行させるには、少なくともサービスが停止していることを確認する必要があります。

関連情報