私のシステムタイマーは次のように構成されており、サービスは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)