연결된 원샷 서비스를 트리거하려는 첫 번째 시도에서 systemd 타이머가 실행되지 않습니다.

연결된 원샷 서비스를 트리거하려는 첫 번째 시도에서 systemd 타이머가 실행되지 않습니다.

어쩌면 상관 관계 타이머가 "일회성" 서비스를 처리하는 방법을 오해했을 수도 있습니다. 이것은 5'(in systemd-247.3-7+deb11u1) 마다 실행되는 더미 장치이자 타이머입니다 .

# systemctl cat dummy.timer dummy.service 
# /etc/systemd/system/dummy.timer
[Unit]
Description=Trigger dummy service every 5'

[Timer]
OnCalendar=*:0/5
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/dummy.service
[Unit]
Description=dummy one-shot service for timer testing

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=echo "Dummy start"
ExecStop=echo "Dummy stop"

[Install]
WantedBy=multi-user.target

가상 서비스는 데몬이 아니지만 시스템 상태를 변경하므로 RemainAfterExit롤백 ExecStop이 발생합니다 ExecStart.

처음에는 모든 것이 괜찮아 보입니다.

# systemctl start dummy.timer dummy.service
... 
# systemctl status dummy.timer dummy.service 
● dummy.timer - Trigger dummy service every 5'
     Loaded: loaded (/etc/systemd/system/dummy.timer; disabled; vendor preset: enabled)
     Active: active (waiting) since Fri 2023-04-07 21:05:39 CEST; 1s ago
    Trigger: Fri 2023-04-07 21:10:00 CEST; 4min 19s left
   Triggers: ● dummy.service

● dummy.service - dummy one-shot service for timer testing
     Loaded: loaded (/etc/systemd/system/dummy.service; disabled; vendor preset: enabled)
     Active: active (exited) since Fri 2023-04-07 21:05:39 CEST; 1s ago
TriggeredBy: ● dummy.timer
    Process: 1805980 ExecStart=echo Dummy start (code=exited, status=0/SUCCESS)
   Main PID: 1805980 (code=exited, status=0/SUCCESS)
        CPU: 1ms

그러나 타이머가 실행되지 않고 "실행 중" 상태로 멈춥니다.

# systemctl status dummy.timer dummy.service 
● dummy.timer - Trigger dummy service every 5'
     Loaded: loaded (/etc/systemd/system/dummy.timer; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-04-07 21:05:39 CEST; 35min ago
    Trigger: n/a
   Triggers: ● dummy.service

● dummy.service - dummy one-shot service for timer testing
     Loaded: loaded (/etc/systemd/system/dummy.service; disabled; vendor preset: enabled)
     Active: active (exited) since Fri 2023-04-07 21:05:39 CEST; 35min ago
TriggeredBy: ● dummy.timer
    Process: 1805980 ExecStart=echo Dummy start (code=exited, status=0/SUCCESS)
   Main PID: 1805980 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Apr 07 21:05:39 myvps echo[1805980]: Dummy start

# systemctl list-timers dummy
NEXT LEFT LAST                         PASSED    UNIT        ACTIVATES
n/a  n/a  Fri 2023-04-07 21:10:09 CEST 30min ago dummy.timer dummy.service

타이머가 "active(exit)"를 종료된 것으로 인식하지 못하는 것 같습니다. 나는 불가능한 일을 시도하고 있는 걸까? 그렇지 않으면 비릿한 냄새가 날 것입니다.

답변1

타이머가 "active(exit)"를 종료된 것으로 인식하지 못하는 것 같습니다.

단위이기 때문에긍정적인. 프로세스 종료 여부는 타이머와 관련이 없습니다. 중요한 것은 장치 전체가 여전히 "활성" 상태라는 것입니다. 즉, 적어도 먼저 중지하지 않으면 다시 활성화할 수 없다는 의미입니다.

물론, 해당 장치는 여전히 "활성" 상태입니다 RemainAfterExit=yes.

타이머가 주기적으로 변경 사항을 다시 적용하도록 하려면 해당 옵션을 제거하고 서비스를 두 개의 일반 일회성 서비스(하나는 상태 적용용, 다른 하나는 미적용 상태용)로 분할해야 합니다.

관련 정보