Чи є спосіб дізнатися, коли буде запущений системний таймер?


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 Я зараз напишу відповідь.
Алексіс Вілке

Відповіді:


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-timersі systemctl status something.timer, але ті не показують афект AccuracySec=і , можливо , інші директиви , які зрушують час.

Якщо встановити AccuracySec=1hдва сервери, вони повідомитимуть, що той самий таймер на обох серверах буде спрацьовувати точно в один і той же час, але насправді вони можуть запуститись до години один від одного! Якщо вам цікаво дізнатися, чи можуть зіткнутися два рандомізовані таймери, здається, немає можливості перевірити остаточний розрахунковий час запуску, щоб дізнатися це.

Для відкриття таймерів списків більш точним / менш заплутаним є відкрита системна проблема .


Цікавий момент про таймери. Інформація, яку ми отримуємо list-timers, однак, вже досить гарна, щоб зрозуміти, чи правильне використання таймерів чи ні.
Алексіс Вілке

1
Не в моєму випадку. Я хотів би використовувати таку саму конфігурацію для хостів-близнюків, але використовувати AccuracySec = для того, щоб обидва не працювали одночасно. Я хотів би побачити, коли таймери насправді будуть стріляти по кожному хосту, але не можуть.
Марк Стосберг

Ага. У мене є подібні проблеми. Я використовував би вибраного майстра (використовуючи систему голосування), і ведучий надсилає повідомлення "робити технічне обслуговування" на комп'ютер 1, як тільки комп'ютер 1 виконаний, він повідомляє про свій новий статус майстру, який потім просить комп'ютер 2 виконати його обслуговування, тощо. Один із цих комп'ютерів, звичайно, був би головним, але код, на якому працює цикл технічного обслуговування, повинен бути окремим від реального технічного обслуговування. Одну проблему потрібно пам’ятати. Якщо ваш кластер зросте зовсім небагато, пам’ятайте, що це потребує часу, і це може бути настільки довгим, що деякі комп’ютери довго не оновлюються!
Алексіс Вілке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.