Apakah ada cara untuk mengetahui kapan timer sistemd akan berjalan berikutnya?

19

Saya menguji timer systemd dan mencoba untuk mengganti batas waktu default-nya, tetapi tidak berhasil. Saya bertanya-tanya apakah ada cara untuk meminta systemd memberi tahu kami kapan layanan akan dijalankan selanjutnya.

File normal ( /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

File override ( /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

Saya menjalankan perintah berikut dan timer masih berdetak setiap 5 menit. Mungkinkah ada bug di systemd?

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

Jadi saya juga bertanya-tanya, bagaimana saya bisa tahu kapan timer akan berdetak selanjutnya? Karena itu akan segera memberi tahu saya apakah dalam 5 menit. atau 30 menit. tetapi dari systemctl status snapbackend.timermengatakan apa-apa tentang itu. Hanya ingin tahu apakah ada perintah yang akan memberi tahu saya penundaan yang saat ini digunakan.

Bagi mereka yang tertarik, ada file layanan juga ( /lib/systemd/system/snapbackend.service), meskipun saya akan membayangkan bahwa ini seharusnya tidak berpengaruh pada kutu waktu ...

# 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
Alexis Wilke
sumber
1
Apakah hasil systemctl list-timersbantuan?
phg
Ah! Menelusuri itu, saya menemukan halaman ini dengan solusinya: bbs.archlinux.org/viewtopic.php?id=214989 Saya akan menulis jawaban sekarang.
Alexis Wilke

Jawaban:

25

Status penghitung waktu aktif saat ini dapat ditampilkan menggunakan 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.
phg
sumber
7

Dari @phg komentar dan jawaban, saya menemukan halaman dengan jawabannya. Penghitung waktu bersifat kumulatif dan Anda harus meresetnya terlebih dahulu jika tidak, entri sebelumnya tetap ada. Ini berguna untuk kalender, tetapi berfungsi sama dengan semua penghitung waktu.

Memiliki satu entri yang mengatur ulang timer sebelum mengubahnya ke nilai baru berfungsi seperti yang diharapkan:

# 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
Alexis Wilke
sumber
1

Tidak, di sana tidak tampak cara melihat kapan penghitung waktu akan berjalan berikutnya. systemdpenawaran systemctl list-timersdan systemctl status something.timer, tetapi itu tidak menunjukkan pengaruh AccuracySec=dan mungkin arahan lain yang mengubah waktu.

Jika Anda mengatur AccuracySec=1hpada dua server, mereka berdua akan melaporkan bahwa timer yang sama pada kedua server akan menyala pada waktu yang sama, tetapi sebenarnya mereka bisa mulai terpisah hingga satu jam! Jika Anda tertarik untuk mengetahui apakah dua timer acak mungkin bertabrakan, tampaknya tidak ada cara untuk memeriksa waktu lari yang dihitung terakhir untuk mengetahuinya.

Ada masalah systemd terbuka untuk membuat output dari daftar-timer lebih akurat / kurang membingungkan.

Mark Stosberg
sumber
Poin menarik tentang timer. Namun, info yang kami peroleh list-timerssudah cukup bagus untuk memahami apakah penggunaan pengatur waktu Anda benar atau tidak.
Alexis Wilke
1
Tidak dalam kasus saya. Saya ingin menggunakan konfigurasi yang sama persis pada host kembar, tetapi gunakan AccuracySec = untuk memastikan bahwa keduanya tidak melakukan pemeliharaan pada saat yang sama. Saya ingin melihat kapan penghitung waktu benar-benar akan menembak setiap host, tetapi tidak bisa.
Mark Stosberg
Ah. Saya memiliki masalah serupa. Saya akan menggunakan master terpilih (menggunakan sistem pemungutan suara) dan master mengirim pesan "lakukan perawatan" ke komputer 1, setelah komputer 1 selesai, ia melaporkan status barunya ke master yang kemudian meminta komputer 2 untuk melakukan pemeliharaannya, dll. Salah satu komputer itu tentu saja akan menjadi master, tetapi kode yang menjalankan loop pemeliharaan harus terpisah dari pemeliharaan yang sebenarnya. Satu masalah yang perlu diingat. Jika cluster Anda tumbuh cukup banyak, ingat bahwa itu membutuhkan waktu dan itu bisa sangat lama sehingga beberapa komputer tidak diperbarui untuk waktu yang lama!
Alexis Wilke