내 시스템 타이머는 다음과 같이 구성되어 있으며 서비스는 5분마다 실행되어야 합니다.
[Unit]
Description=Sync mail
[Timer]
OnCalendar=*:0/5
Unit=mail.service
[Install]
WantedBy=multi-user.target
그러나 타이머 상태는 다음과 같습니다.
● mail.timer - Sync mail
Loaded: loaded (/home/phil/.config/systemd/user/mail.timer; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-06-12 09:49:05 CEST; 15min ago
Trigger: n/a
Triggers: ● mail.service
Jun 12 09:49:05 arch systemd[396]: Started Sync mail.
한 번만 실행되고 그 이후에는 다시 실행되지 않았습니다. 어떤 제안이 있으십니까? 왜 이런 일이 발생합니까?
답변1
타이머는 Trigger: n/a
트리거된 장치가 계속 실행되는 동안 알려줍니다. 이미 실행 중인 서비스를 예약하려고 시도하지 않습니다. 서비스가 중지되면 타이머 트리거가 다음 적절한 시간으로 설정됩니다.
mail.service를 실행하는 데 12분이 걸리는 경우 타이머가 한 번 실행되고 서비스는 12분 동안 실행된 다음 타이머가 3분 후에 실행되도록 예약하므로 두 호출 사이에 15분의 간격이 생깁니다.
그래서 대답은 "인내심을 가져라"이다. 완료되면 mail.service
다음 5분 시점에 다시 시작됩니다.
예는 다음과 같습니다.
# mytime.service
[Service]
Type=oneshot
ExecStart=/bin/sleep 10
# mytime.timer
[Timer]
OnCalendar=*:0/1
내가 그렇게 하면 systemctl start mytime.timer
우리는 이것을 보게 될 것입니다:
$ systemctl --user status mytime.timer mytime.service
● mytime.timer - Test timer
Active: active (waiting) since Sat 2021-06-12 10:56:01 CEST; 725ms ago
Trigger: Sat 2021-06-12 10:57:00 CEST; 59s left
● mytime.service
Active: inactive (dead)
서비스가 실행되면 다음이 표시됩니다.
$ systemctl --user status mytime.timer mytime.service
● mytime.timer - Test timer
Active: active (running) since Sat 2021-06-12 10:56:01 CEST; 1min ago
Trigger: n/a
● mytime.service
Active: activating (start) since Sat 2021-06-12 10:57:00 CEST; 10ms ago
CGroup: /user.slice/user-1000.slice/[email protected]/app.slice/mytime.service
└─11346 /bin/sleep 10
종료 되면 sleep 10
트리거가 설정됩니다.
$ systemctl --user status mytime.timer mytime.service
● mytime.timer - Test timer
Active: active (waiting) since Sat 2021-06-12 10:56:01 CEST; 1min 11s ago
Trigger: Sat 2021-06-12 10:58:00 CEST; 49s left
● mytime.service
Active: inactive (dead) since Sat 2021-06-12 10:57:10 CEST; 1s ago
Process: 11346 ExecStart=/bin/sleep 10 (code=exited, status=0/SUCCESS)