おそらく、相関タイマーが「ワンタイム」サービスを処理する方法を誤解した可能性があります。これは5 '(in systemd-247.3-7+deb11u1
)ごとに実行されるダミーデバイスとタイマーです。
# systemctl cat dummy.timer dummy.service
# /etc/systemd/system/dummy.timer
[Unit]
Description=Trigger dummy service every 5'
[Timer]
OnCalendar=*:0/5
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/dummy.service
[Unit]
Description=dummy one-shot service for timer testing
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=echo "Dummy start"
ExecStop=echo "Dummy stop"
[Install]
WantedBy=multi-user.target
仮想サービスはデーモンではありませんが、システムの状態が変わるため、RemainAfterExit
ロールバックがExecStop
発生しますExecStart
。
最初はすべてが大丈夫に見えます。
# systemctl start dummy.timer dummy.service
...
# systemctl status dummy.timer dummy.service
● dummy.timer - Trigger dummy service every 5'
Loaded: loaded (/etc/systemd/system/dummy.timer; disabled; vendor preset: enabled)
Active: active (waiting) since Fri 2023-04-07 21:05:39 CEST; 1s ago
Trigger: Fri 2023-04-07 21:10:00 CEST; 4min 19s left
Triggers: ● dummy.service
● dummy.service - dummy one-shot service for timer testing
Loaded: loaded (/etc/systemd/system/dummy.service; disabled; vendor preset: enabled)
Active: active (exited) since Fri 2023-04-07 21:05:39 CEST; 1s ago
TriggeredBy: ● dummy.timer
Process: 1805980 ExecStart=echo Dummy start (code=exited, status=0/SUCCESS)
Main PID: 1805980 (code=exited, status=0/SUCCESS)
CPU: 1ms
ただし、タイマーは実行されず、「実行中」状態に停止します。
# systemctl status dummy.timer dummy.service
● dummy.timer - Trigger dummy service every 5'
Loaded: loaded (/etc/systemd/system/dummy.timer; disabled; vendor preset: enabled)
Active: active (running) since Fri 2023-04-07 21:05:39 CEST; 35min ago
Trigger: n/a
Triggers: ● dummy.service
● dummy.service - dummy one-shot service for timer testing
Loaded: loaded (/etc/systemd/system/dummy.service; disabled; vendor preset: enabled)
Active: active (exited) since Fri 2023-04-07 21:05:39 CEST; 35min ago
TriggeredBy: ● dummy.timer
Process: 1805980 ExecStart=echo Dummy start (code=exited, status=0/SUCCESS)
Main PID: 1805980 (code=exited, status=0/SUCCESS)
CPU: 1ms
Apr 07 21:05:39 myvps echo[1805980]: Dummy start
# systemctl list-timers dummy
NEXT LEFT LAST PASSED UNIT ACTIVATES
n/a n/a Fri 2023-04-07 21:10:09 CEST 30min ago dummy.timer dummy.service
タイマーが「active(exit)」を終了したと認識していないようです。私は不可能なことを試していますか?さもなければ、不快な臭いがするでしょう。
答え1
タイマーが「active(exit)」を終了したと認識していないようです。
単位だからポジティブ。プロセスを終了するかどうかはタイマーとは関係ありません。重要なことは、デバイス全体がまだ「アクティブ」状態であることです。つまり、少なくとも最初に停止しないと再度有効にできないという意味です。
もちろん、そのデバイスはまだ「アクティブ」状態ですRemainAfterExit=yes
。
タイマーが定期的に変更を再適用できるようにするには、そのオプションを削除し、サービスを2つの一般的なワンタイムサービス(1つは状態適用用、もう1つは未適用状態用)に分割する必要があります。