接続されたワンショットサービスをトリガしようとする最初の試みでは、systemdタイマーは実行されません。

接続されたワンショットサービスをトリガしようとする最初の試みでは、systemdタイマーは実行されません。

おそらく、相関タイマーが「ワンタイム」サービスを処理する方法を誤解した可能性があります。これは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つは未適用状態用)に分割する必要があります。

関連情報