컴퓨터가 종료될 때 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=60m서비스 관리자가 처음 시작된 시간을 기준으로 타이머를 정의합니다.
  • RandomizedDelaySec=60m0에서 60m 사이에서 무작위로 선택되고 균등하게 분배된 시간만큼 타이머를 지연시킵니다. 각 타이머 장치는 각 반복 전에 이 지연을 무작위로 결정하며 지연은 다음으로 결정된 경과 시간 위에 추가됩니다. 이 설정을 사용하면 유사하게 구성된 타이머 이벤트의 일정을 일정 간격으로 확장하여 이벤트가 동시에 실행되어 잠재적으로 리소스 정체를 일으키는 것을 방지할 수 있습니다.

따라서 밤새 기계를 방치하면 자정부터 01:00 사이에 트리거됩니다. 컴퓨터를 다시 시작하면 시작 후 1~2시간 이내에 트리거됩니다. 밤새 컴퓨터를 종료하면 아침에 부팅 후 1시간 이내에 실행되고( OnCalendar/ Persistent트리거의 경우) 부팅 후 1~2시간 이내에 다시 실행됩니다( OnStartupSec/trigger의 경우).

나는 당신의 가장 큰 관심사가 23:00에 기계를 시작할 때 무슨 일이 일어나는지 의심합니다. 이 경우 00:00에서 01:00 사이에 두 번 실행됩니다. 트리거가 실행될 때 서비스가 oneshot계속 실행 중이 면 activating트리거가 무시됩니다. ExecStart=따라서 동일한 서비스에 대해 두 개의 동시 트리거가 없으므로 안전합니다.

그러나 실행 사이의 최소 시간을 요구합니다. 우리는 일반적으로 사물을 안전하게 유지하기 위해 "시간"을 사용하지 않으려고 노력합니다. 이는 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)는 다음과 같습니다.별로 안전하지 않음.

고칠 수 있는지 알려주세요.

관련 정보