매시간 스크립트를 실행하도록 되어 있는 타이머를 사용하여 시스템 서비스를 만들었지만 그렇지 않습니다.
% cat /etc/systemd/system/myservice.service
[Unit]
Description=Run script after network established
Requires=network-online.target
After=network-online.target
[Service]
Type=simple
RemainAfterExit=yes
ExecStart="/srv/script"
[Install]
WantedBy=multi-user.target
% cat /etc/systemd/system/myservice.timer
[Unit]
Description=Run script every hour
[Timer]
OnBootSec=15min
OnUnitActiveSec=1h
[Install]
WantedBy=timers.target
네트워크가 설정된 후에 스크립트를 실행하지만 그 이후에는 매시간 계속 실행되지 않습니다.
sudo systemctl status myservice.{service,timer}
...둘 다 active
및 임을 보여줍니다 enabled
.
시간 파일이 서비스 파일을 참조하도록 하려면 어떻게 해야 합니까?
추가 정보:
% systemctl list-timers --system --all
NEXT LEFT LAST PASSED UNIT ACTIVATES
~~~~~~~~~~~~~~~~
Sun 2023-09-24 03:10:54 BST 3 days left Sun 2023-09-17 03:10:50 BST 3 days ago e2scrub_all.timer e2scrub_all.service
- - - - fstrim.timer fstrim.service
- - Wed 2023-09-20 17:28:10 BST 2h 27min ago myservice.timer myservice.service
답변1
man systemd.timer
설명하다:
타이머가 만료될 때 활성화할 장치가 이미 활성화된 경우 장치는 다시 시작되지 않고 계속 실행됩니다. 이 경우 새 서비스 인스턴스를 생성한다는 개념이 없습니다. 따라서
RemainAfterExit=
세트가 있는 서비스(서비스의 기본 프로세스가 종료된 후에도 지속됨)는 일반적으로 반복 타이머를 통한 활성화에 적합하지 않습니다. 왜냐하면 서비스는 한 번만 활성화되고 영원히 지속되기 때문입니다.
이를 사용하면 작업이 완료된 후에도 RemainAfterExit=yes
서비스가 활성 상태로 유지됩니다 . 서비스가 활성화되어 있으므로 타이머는 다른 인스턴스를 생성하지 않습니다.active
/srv/script
대답은 아마도 삭제일 것입니다 RemainAfterExit=yes
. 타이머가 작업을 실행하도록 하려면 최소한 서비스가 중지되었는지 확인해야 합니다.