다음에 시스템 타이머가 언제 실행 될지 알 수있는 방법이 있습니까?


19

시스템 타이머를 테스트하고 기본 시간 초과를 무시하려고하지만 성공하지 못했습니다. 다음에 서비스가 언제 실행 될지 systemd에게 알려주는 방법이 있는지 궁금합니다.

일반 파일 ( /lib/systemd/system/snapbackend.timer) :

# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.timer.html

[Unit]
Description=Run the snapbackend service once every 5 minutes.

[Timer]
# You must have an OnBootSec (or OnStartupSec) otherwise it does not auto-start
OnBootSec=5min
OnUnitActiveSec=5min
# The default accuracy is 1 minute. I'm not too sure that either way
# will affect us. I am thinking that since our computers will be
# permanently running, it probably won't be that inaccurate anyway.
# See also:
# http://stackoverflow.com/questions/39176514/is-it-correct-that-systemd-timer-accuracysec-parameter-make-the-ticks-slip
#AccuracySec=1

[Install]
WantedBy=timers.target

# vim: syntax=dosini

재정의 파일 ( /etc/systemd/system/snapbackend.timer.d/override.conf) :

# This file was auto-generated by snapmanager.cgi
# Feel free to do additional modifications here as
# snapmanager.cgi will be aware of them as expected.
[Timer]
OnUnitActiveSec=30min

다음 명령을 실행했지만 타이머는 5 분마다 한 번씩 틱합니다. systemd에 버그가있을 수 있습니까?

sudo systemctl stop snapbackend.timer
sudo systemctl daemon-reload
sudo systemctl start snapbackend.timer

그래서 타이머가 다음에 언제 똑딱 거리는지 어떻게 알 수 있습니까? 그것이 바로 5 분 안에 있는지 알려주기 때문입니다. 또는 30 분 그러나 그 systemctl status snapbackend.timer말에 대해서는 아무것도 말하지 않았습니다. 현재 사용되는 지연을 알려주는 명령이 있는지 궁금합니다.

관심있는 사람들에게는 서비스 파일도 있습니다 ( /lib/systemd/system/snapbackend.service). 그러나 이것이 타이머 틱에 영향을 미치지 않아야한다고 상상할 것입니다 ...

# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html

[Unit]
Description=Snap! Websites snapbackend CRON daemon
After=snapbase.service snapcommunicator.service snapfirewall.service snaplock.service snapdbproxy.service

[Service]
# See also the snapbackend.timer file
Type=simple
WorkingDirectory=~
ProtectHome=true
NoNewPrivileges=true
ExecStart=/usr/bin/snapbackend
ExecStop=/usr/bin/snapstop --timeout 300 $MAINPID
User=snapwebsites
Group=snapwebsites
# No auto-restart, we use the timer to start once in a while
# We also want to make systemd think that exit(1) is fine
SuccessExitStatus=1
Nice=5
LimitNPROC=1000
# For developers and administrators to get console output
#StandardOutput=tty
#StandardError=tty
#TTYPath=/dev/console
# Enter a size to get a core dump in case of a crash
#LimitCORE=10G

[Install]
WantedBy=multi-user.target

# vim: syntax=dosini

1
의 출력합니까 systemctl list-timers도움을?
phg

아! 그것을 검색하면서 해결책이있는이 페이지를 찾았습니다 : bbs.archlinux.org/viewtopic.php?id=214989 지금 답변을 드리겠습니다.
Alexis Wilke

답변:


25

현재 활성화 된 타이머의 상태는 다음을 사용하여 표시 할 수 있습니다 systemctl list-timers.

$ systemctl list-timers --all
NEXT                         LEFT     LAST                         PASSED       UNIT                         ACTIVATES
Wed 2016-12-14 08:06:15 CET  21h left Tue 2016-12-13 08:06:15 CET  2h 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service

1 timers listed.

7

@phg 의견과 답변에서 답변이있는 페이지를 찾았습니다. 타이머는 누적 되므로 먼저 재설정해야합니다. 그렇지 않으면 이전 항목이 그대로 유지됩니다. 캘린더에 유용하지만 모든 타이머에서 동일하게 작동합니다.

새 값으로 변경하기 전에 타이머를 재설정하는 항목이 하나 있으면 예상대로 작동합니다.

# This file was auto-generated by snapmanager.cgi
# Feel free to do additional modifications here as
# snapmanager.cgi will be aware of them as expected.
[Timer]
OnUnitActiveSec=
OnUnitActiveSec=30min

1

아니요, 다음에 타이머가 실행될 때 정확히 볼 수있는 방법이 없습니다. systemd이벤트 systemctl list-timerssystemctl status something.timer, 그러나 그이 (가)의 영향을 표시하지 않습니다 AccuracySec=및 시간을 이동 가능한 다른 지시어.

AccuracySec=1h두 대의 서버 를 설정 하면 두 서버에서 동일한 타이머가 정확히 동시에 실행된다고보고하지만 실제로는 최대 1 시간 간격으로 시작할 수 있습니다! 두 개의 임의 타이머가 충돌하는지 알고 싶다면 최종 계산 된 런타임을 확인하는 방법이없는 것 같습니다.

목록 타이머의 출력을보다 정확하고 덜 혼란스럽게 만들기 위해 체계화 된 문제 가 있습니다 .


타이머에 대한 흥미로운 점. 그러나 우리가 얻는 정보 list-timers는 이미 타이머 사용법이 올바른지 여부를 이해하는 것이 좋습니다.
Alexis Wilke 2016 년

1
내 경우에는 그렇지 않습니다. 트윈 호스트에서 똑같은 구성을 사용하고 싶지만, 정확도 유지를 사용하여 두 가지가 동시에 유지 관리되지 않도록하십시오. 타이머가 실제로 각 호스트에서 언제 시작되는지 확인하고 싶지만 그렇지 않습니다.
Mark Stosberg 2018 년

아 비슷한 문제가 있습니다. 선택한 투표 (투표 시스템 사용)를 사용하고 마스터는 컴퓨터 1에 "유지 보수 수행"메시지를 보내고 컴퓨터 1이 완료되면 마스터 2에게 새 상태를보고 한 다음 컴퓨터 2에 유지 관리를 요청합니다. 물론 이러한 컴퓨터 중 하나는 마스터이지만 유지 관리 루프를 실행하는 코드는 실제 유지 관리와 분리되어야합니다. 명심해야 할 한 가지 문제. 클러스터가 약간 커질 경우 시간이 걸리고 일부 컴퓨터가 오랫동안 업데이트되지 않는 데 시간이 오래 걸릴 수 있음을 기억하십시오!
Alexis Wilke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.