나는 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
.
$ 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.
답변2
@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
답변3
아니요, 다음에 타이머가 언제 실행될지 정확히 알 수 있는 방법은 없습니다. systemd
및 systemctl list-timers
, 그러나 이것들은 시간을 변경할 수 있는 다른 지침뿐만 아니라 systemctl status something.timer
영향을 미치는 것으로 나타나지 않았습니다 .AccuracySec=
두 서버에 이를 설정 하면 AccuracySec=1h
두 서버 모두에서 동일한 타이머가 정확히 동시에 실행된다고 보고하지만 실제로는 한 시간 간격으로 실행될 수 있습니다! 두 개의 무작위 타이머가 충돌할 수 있는지 알고 싶다면 최종 계산된 실행 시간을 확인하여 알아내는 것은 불가능해 보입니다.
하나 있다시스템 문제가 해결되었습니다.목록 타이머의 출력을 더 정확하고 덜 혼란스럽게 만듭니다.
또한 다음을 기반으로 하는 RandomizedDelaySec
옵션이 있습니다.AccuracySec
매뉴얼 페이지.
답변4
현재 상태를 보려면 $SYSTEMD_TIMER
다음을 실행하세요.
systemctl list-timers $SYSTEMD_TIMER
# will give output simmilar to
# NEXT LEFT LAST PASSED UNIT ACTIVATES
# Sun 2022-01-09 21:33:00 CET 2h 9min left n/a n/a $SYSTEMD_TIMER $SYSTEMD_SERVICE
따라서 특정 문제에 대한 명령은 입니다 systemctl list-timers snapbackend.timer
.