어쩌면 상관 관계 타이머가 "일회성" 서비스를 처리하는 방법을 오해했을 수도 있습니다. 이것은 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
.
타이머가 주기적으로 변경 사항을 다시 적용하도록 하려면 해당 옵션을 제거하고 서비스를 두 개의 일반 일회성 서비스(하나는 상태 적용용, 다른 하나는 미적용 상태용)로 분할해야 합니다.