行う方法システム制御 時間制労働者特定のトリガ時間でコンピュータがシャットダウンした場合は動作しますか? " "オプションがありますが、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=60m
Service Manager が最初に開始された時刻に基づいてタイマーを定義します。RandomizedDelaySec=60m
0から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
セキュリティについては心配する必要はありません。
答え2
そうだ働かない、コンピュータの電源が切れている場合、またはインターネットに接続されていない場合は、次のメッセージが表示され続けるため、続行できません。
$ systemctl --no-pager status mintupdate-automation-upgrade.timer
...
Trigger: Tue 2021-02-02 00:32:40 CET; 13h left
したがって、更新プロセス(少なくともこのアプローチを使用している場合unattended-upgrades
)は次のようになります。あまり安全ではない。
修正できるか教えてください。