systemd.time - OnCalendar= 일시 중지 후 실행할 필요가 없습니다.

systemd.time - OnCalendar= 일시 중지 후 실행할 필요가 없습니다.

나는 crontab의 "더 어리석은" 버전을 원합니다. 주어진 시간에만 실행되고 일시 중지 후에는 따라잡지 않습니다. 즉, crontab에 의해 서비스가 트리거되어야 하는데 시스템이 정지된 경우 재개 직후에 서비스가 트리거됩니다. 그것이 내가 원하지 않는 것입니다.

나는 systemd.timer 유닛(crontab 대신)과 머신이 일시 중단되려고 할 때 타이머 유닛을 비활성화하고 시스템이 재개될 때 타이머 유닛을 다시 활성화하는 해당 -sleep.service를 작성하여 이 문제를 해결했습니다. 지난 주말 마지막 업데이트 이후 갑자기 crontab처럼 동작합니다. 타이머 장치 내부에 지정된 시간이 아니더라도 타이머 장치가 시작될 때 타이머 장치가 대상을 시작합니다.

로그를 확인했는데 -sleep.service 장치가 작업을 수행하고 타이머 장치를 비활성화했습니다. (타이머 장치에는 비활성화 및 재활성화되는 모습도 표시됩니다.) 하지만 앞서 말했듯이 타이머 장치가 "따라잡는" 것을 원하지 않습니다. 나는 그것이 주어진 시간에만 해당 유닛을 트리거하고 다른 것은 아무것도 실행하지 않기를 원합니다!

매우 감사합니다!

돔님 안녕하세요

# horcrux-sleep.service
[Unit]                                                           
Description=horcrux sleep hook                                   
Before=sleep.target                                              
Before=shutdown.target                                           
StopWhenUnneeded=yes                                             
RefuseManualStart=yes                                            
                                                                 
[Service]                                                        
Type=oneshot                                                     
RemainAfterExit=yes                                              
ExecStart=/usr/bin/systemctl stop horcrux.timer                  
ExecStop=/usr/bin/systemctl start horcrux.timer                  
                                                                 
[Install]                                                        
WantedBy=sleep.target                                            
Also=horcrux.timer
# horcrux.timer
Jun 27 06:51:15 citadel systemd[1]: Stopped Schedule for backup.
[Unit]                                                           
Description=Schedule                       
                                                                 
[Timer]                                                          
OnCalendar=Mon *-*-* 20..21:00:00                                                                                                 

OnCalendar=Tue..Thu *-*-* 17..21:00:00                           
OnCalendar=Fri *-*-* 17..23:00:00                                                                                                 

OnCalendar=Sat *-*-* *:00:00                                     
OnCalendar=Sun *-*-* 00..21:00:00                                
                                                                 
## Spätschicht                                                   
#OnCalendar=Mon..Wed,Fri *-*-* 7..11:00:00                       
                                                                 
## Frühschicht am Donnerstag                                     
#OnCalendar=Thu *-*-* 13..16:00:00                               
                                                                 
## Frühschicht täglich                                           
#OnCalendar=Mon..Fri *-*-* 7..11:00:00                           
                                                                 
## freie Tage                                                    
#OnCalendar=Mon..Fri 9..11,14..16,0..5:00:00                     
                                                                 
## Urlaub / Krankheit                                            
#OnCalendar=*-*-* *:00:00                                        
                                                                 
                                                                 
Persistent=1                                                     
                                                                 
AccuracySec=1sec                                                 
                                                                 
[Install]                                                        
WantedBy=timers.target                                           
Also=horcrux-sleep.service

답변1

아마도 끊임없는 방해 때문일 수도 있습니다. https://www.freedesktop.org/software/systemd/man/systemd.timer.html#Percious=

지속성 설정 = false

답변2

사용 시 일시 중지/재개 시 비활성화했다가 다시 활성화할 필요가 없습니다 Persistent=true.
이것이 이 명령어의 전체 아이디어이기 때문에 재사용을 위해 정보를 디스크에 저장합니다.

horcrux-sleep.service따라서 직면하고 있는 문제는 필요하지 않은 시스템 타이머를 사용했기 때문일 수 있습니다 .

RandomizedDelaySec=아마도 타이머 셀의 값을 확인하여 systemctl show0이 아닌 값이 있는지 확인해야 할 것입니다. 이 경우 로 설정할 수 있습니다 0.
의 값 과 , 및OnClockChange=OnTimezoneChange=RemainAfterElapse=

( man systemd.timer이 지침에 대한 설명을 참조하세요)

답변3

많은 테스트 후에도 Persistent=boolean작업이 완료되지 않았습니다. 지금쯤 나는 /etc/crontab모든 시간이 아나크론 문제를 해결하는 데 소비되어 위에서 볼 수 있는 시스템 구성이 발생했다는 사실을 완전히 잊어버렸기 crontab -e때문에 그러한 스레드가 전혀 없었습니다.

그러나 작업을 완료하기 위해 작업을 추가할 /etc/crontab때 오류가 발생하지 않습니다 . "따라잡기"가 발생하지 않습니다.

관련 정보