시스템 서비스 타이머가 작동하지 않습니다.

시스템 서비스 타이머가 작동하지 않습니다.

매시간 스크립트를 실행하도록 되어 있는 타이머를 사용하여 시스템 서비스를 만들었지만 그렇지 않습니다.

% 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. 타이머가 작업을 실행하도록 하려면 최소한 서비스가 중지되었는지 확인해야 합니다.

관련 정보