コンピュータがシャットダウンしたときのsystemctl永続タイマーとサービス

コンピュータがシャットダウンしたときのsystemctl永続タイマーとサービス

行う方法システム制御 時間制労働者特定のトリガ時間でコンピュータがシャットダウンした場合は動作しますか? " "オプションがありますが、Persistentコマンドはいつ実行されますか?コマンドが安全に実行されることはどのくらい保証されていますか?たとえば、実行の間に与えられた最大時間は経過しません。

状態:

$ systemctl status mintupdate-automation-upgrade.timer
● mintupdate-automation-upgrade.timer - Update Manager automatic upgrades
     Loaded: loaded (/lib/systemd/system/mintupdate-automation-upgrade.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Fri 2021-01-22 20:20:24 CET; 4 days ago
    Trigger: Thu 2021-01-28 00:44:21 CET; 12h left
   Triggers: ● mintupdate-automation-upgrade.service

構成ファイル

$ systemctl cat mintupdate-automation-upgrade.*
# /lib/systemd/system/mintupdate-automation-upgrade.timer
[Unit]
Description=Update Manager automatic upgrades

[Timer]
OnCalendar=daily
OnStartupSec=60m
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target

# /lib/systemd/system/mintupdate-automation-upgrade.service
[Unit]
Description=Update Manager automatic upgrades
After=network-online.target

[Service]
Type=oneshot
CPUQuota=50%
CPUWeight=20
IOWeight=20
ExecStart=/usr/lib/linuxmint/mintUpdate/automatic_upgrades.py

[Install]
WantedBy=multi-user.target

タイマーには永続フラグがありますが、サービス(タイマーによってトリガーされる)に永続フラグはありません。

$ systemctl show mintupdate-automation-upgrade.timer --property=Persistent
Persistent=yes

ベストアンサー1

Persistent=タイマーにのみ適用されます(参照:man systemd.timer)。だからあなたはそれを見ることができません

systemctl show mintupdate-automation-upgrade.service --property=Persistent

タイマーを見ると、次のように表示されます。

[Timer]
OnCalendar=daily
OnStartupSec=60m
RandomizedDelaySec=60m
Persistent=true
  • OnCalendar=daily:カレンダーイベント式を使用してリアルタイム(ウォールクロックなど)タイマーを定義します。daily。これが実際に意味するのは、毎晩深夜に実行されるということです。
  • Persistent=true:「サービスユニットが最後にトリガされた時間がディスクに保存されます。オフになっていると、不足しているサービスの実行に追いつくのに役立つRandomizedDelaySec =の遅延の影響を受けます。
  • OnStartupSec=60mService Manager が最初に開始された時刻に基づいてタイマーを定義します。
  • RandomizedDelaySec=60m0から60mの間でランダムに選択され、均等に分配された時間だけタイマーを遅延させます。各タイマーユニットは、各反復の前にこの遅延をランダムに決定し、遅延は次に決定された経過時間の上に追加されます。この設定を使用すると、同様に設定されたタイマーイベントのスケジュールを一定の間隔で拡張して、イベントが同時に実行され、潜在的にリソース輻輳を引き起こすのを防ぎます。

したがって、一晩マシンを放置すると、真夜中から01:00の間にトリガーされます。コンピュータを再起動すると、起動後1〜2時間以内に起動します。一晩コンピュータをシャットダウンすると、午前中に起動後1時間以内に実行され(OnCalendar/Persistentトリガの場合)、起動後1〜2時間以内に再実行されます(OnStartupSec/triggerの場合)。

私はあなたの最大の関心事が23:00にマシンを起動したときに何が起こるのか疑問に思います。この場合、00:00~01:00の間に2回実行されます。トリガーが実行されているときにサービスがoneshotまだ実行されている場合、activatingトリガーは無視されます。ExecStart=したがって、同じサービスに対して2つの同時トリガがないため、安全です。

ただし、実行間の最小時間が必要です。私たちは通常、物事を安全に保つために「時間」を使用しないように努めています。これはbashスクリプトを追加するのと似ておりsleep、怠惰なので適切な信号を受信できないときに回避策になることがよくあります(./foo & sleep 5 && ./bar)。また、時間が経過したときに実際に準備されるという保証がないため、危険な作業でもあります。このスクリプトをうまく書いたら、別の時間( )なしで連続して何度も実行する必要があるため、./foo && ./foo && ./fooセキュリティについては心配する必要はありません。

おすすめ記事