システムタイマーにトリガーがありません。

システムタイマーにトリガーがありません。

私のシステムタイマーは次のように構成されており、サービスは5分ごとに実行する必要があります。

[Unit]
Description=Sync mail

[Timer]
OnCalendar=*:0/5
Unit=mail.service

[Install]
WantedBy=multi-user.target

ただし、タイマーの状態は次のとおりです。

● mail.timer - Sync mail
     Loaded: loaded (/home/phil/.config/systemd/user/mail.timer; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-06-12 09:49:05 CEST; 15min ago
    Trigger: n/a
   Triggers: ● mail.service

Jun 12 09:49:05 arch systemd[396]: Started Sync mail.

一度だけ実行され、その後は再実行されませんでした。どんな提案がありますか?なぜこれが起こるのですか?

答え1

タイマーは、Trigger: n/aトリガーされたデバイスの実行中に通知します。すでに実行されているサービスをスケジュールしようとしません。サービスが停止すると、タイマートリガは次の適切な時間に設定されます。

mail.service の実行に 12 分かかる場合、タイマーが 1 回実行され、サービスが 12 分間実行され、次にタイマーが 3 分後に実行されるようにスケジュールされるため、2 つの呼び出しの間に 15 分の間隔が生じます。

だから答えは「忍耐を持ってください」です。完了すると、mail.service次の5分後に再起動します。


例は次のとおりです。

# mytime.service
[Service]
Type=oneshot
ExecStart=/bin/sleep 10

# mytime.timer
[Timer]
OnCalendar=*:0/1

私がそうすれば、systemctl start mytime.timer私たちはこれを見るでしょう:

$ systemctl --user status mytime.timer mytime.service
● mytime.timer - Test timer
     Active: active (waiting) since Sat 2021-06-12 10:56:01 CEST; 725ms ago
    Trigger: Sat 2021-06-12 10:57:00 CEST; 59s left

● mytime.service
     Active: inactive (dead)

サービスが実行されると、以下が表示されます。

$ systemctl --user status mytime.timer mytime.service
● mytime.timer - Test timer
     Active: active (running) since Sat 2021-06-12 10:56:01 CEST; 1min ago
    Trigger: n/a

● mytime.service
     Active: activating (start) since Sat 2021-06-12 10:57:00 CEST; 10ms ago
     CGroup: /user.slice/user-1000.slice/[email protected]/app.slice/mytime.service
             └─11346 /bin/sleep 10

終了するとsleep 10トリガーが設定されます。

$ systemctl --user status mytime.timer mytime.service
● mytime.timer - Test timer
     Active: active (waiting) since Sat 2021-06-12 10:56:01 CEST; 1min 11s ago
    Trigger: Sat 2021-06-12 10:58:00 CEST; 49s left

● mytime.service
     Active: inactive (dead) since Sat 2021-06-12 10:57:10 CEST; 1s ago
    Process: 11346 ExecStart=/bin/sleep 10 (code=exited, status=0/SUCCESS)

関連情報