내가 묻는 질문은 시스템 타이머 및 그 동작과 관련이 있습니다. systemd 타이머로 작업하는 방법에 대한 예를 찾았습니다.여기.
제가 제공한 링크가 Fedora 지향 사이트에 대한 링크이더라도 이 특정 주제는 Red Hat 기반 배포판에만 국한되지 않습니다. 내 lubuntu 20.04에서 동일한 작업을 시도했지만 작동하더라도 예상한 대로 작동하지 않습니다. 기본적으로 지정된 파일(현재 시간 포함)에 일부 텍스트를 출력하는 스크립트를 생성한 다음 제공한 링크에 제공된 예제에서와 동일한 방식으로 .service
해당 파일을 생성했습니다. .timer
문제는 다음 줄에 있습니다 schedule-test.timer
.
[Unit]
Description=Schedule a message every 1 minute
RefuseManualStart=no
RefuseManualStop=no
[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Run 120 seconds after boot for the first time
OnBootSec=120
#Run every 1 minute thereafter
OnUnitActiveSec=60
#File describing job to execute
Unit=schedule-test.service
[Install]
WantedBy=timers.target
schedule-test.service
따라서 기본적으로 이 타이머는 부팅 후 120초 동안 실행되고 실행 중에는 60초마다 실행될 것으로 예상할 수 있습니다 . 그러나 반대의 경우가 발생합니다. 스크립트가 출력을 작성하는 파일 부분은 다음과 같습니다.
This is only a test: Sat 30 Jul 2022 08:43:41 AM
This is only a test: Sat 30 Jul 2022 08:45:41 AM
This is only a test: Sat 30 Jul 2022 08:47:41 AM
This is only a test: Sat 30 Jul 2022 08:49:41 AM
This is only a test: Sat 30 Jul 2022 08:51:41 AM
보시다시피 스크립트는 시스템이 실행 중일 때 120초마다 실행됩니다
OnUnitActiveSec=60
. 여기서 내가 뭘 잘못하고 있는 걸까요? 내 추론이 잘못된 걸까요, 아니면 어떤 이유로든 제대로 작동하지 않는 걸까요?
답변1
systemd
타이머는 기본적으로 초 단위까지 정확하지 않습니다. 둘 중 하나에서 1분의 창이 허용됩니다(당신의 경우에는) OnBootSec=
또는 OnUnitActiveSec=
기타(OnCalendar=, OnActiveSec=, OnStartupSec= and OnUnitInactiveSec=
) ... 이는 기본 절전 기능이지만 정확도를 1초까지 낮출 수 있습니다(최소 및 가장 정확한 값은 1입니다.마이크로초즉AccuracySec=1 us
) 설정으로AccuracySec=1
다음과 같이 타이머 장치에 추가 항목으로 추가합니다.
[Unit]
Description=Schedule a message every 1 minute
RefuseManualStart=no
RefuseManualStop=no
[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Set the timer accuracy to 1 second instead of the default 1 minute
AccuracySec=1
#Run 120 seconds after boot for the first time
OnBootSec=120
#Run every 1 minute thereafter
OnUnitActiveSec=60
#File describing job to execute
Unit=schedule-test.service
[Install]
WantedBy=timers.target