Daha sonra bir systemd zamanlayıcısının ne zaman çalışacağını bilmenin bir yolu var mı?


19

Bir systemd zamanlayıcıyı test ediyorum ve varsayılan zaman aşımını geçersiz kılmaya çalışıyorum, ancak başarılı olamadı. Systemd'in bir sonraki hizmetin ne zaman çalıştırılacağını bize sormasının bir yolu olup olmadığını merak ediyorum.

Normal dosya ( /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

Geçersiz kılma dosyası ( /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

Aşağıdaki komutları çalıştırdım ve zamanlayıcı hala her 5 dakikada bir keneler. Systemd'de bir hata olabilir mi?

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

Bu yüzden merak ediyorum, zamanlayıcının bir sonraki adımını ne zaman işaretleyeceğini nasıl bilebilirim? Çünkü bu hemen bana 5 dakika içinde olup olmadığını söylerdi. veya 30 dak. ama bu systemctl status snapbackend.timerkonuda hiçbir şey söylemiyor. Sadece şu anda kullanılan gecikmeyi söyleyecek bir komut olup olmadığını merak ediyorum.

İlgilenenler için, hizmet dosyası da ( /lib/systemd/system/snapbackend.service) var, ancak bunun zamanlayıcı keneleri üzerinde hiçbir etkisi olmaması gerektiğini hayal etsem de ...

# 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-timersYardım çıktı mı ?
phg

Ah! Bunu ararken, bu sayfayı şu çözümle buldum: bbs.archlinux.org/viewtopic.php?id=214989 Şimdi bir cevap yazacağım.
Alexis Wilke

Yanıtlar:


25

Halihazırda aktif olan zamanlayıcıların durumu aşağıdakiler kullanılarak gösterilebilir 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 yorum ve yanıtından cevabı içeren bir sayfa buldum. Zamanlayıcılar kümülatiftir ve önce sıfırlamanız gerekir, aksi takdirde önceki giriş kalır. Bu takvimler için kullanışlıdır, ancak tüm zamanlayıcılarla aynı şekilde çalışır.

Zamanlayıcıyı yeni bir değere değiştirmeden önce sıfırlayan bir giriş olması beklendiği gibi çalışır:

# 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

Hayır, bir zamanlayıcının bir daha ne zaman çalışacağını tam olarak görmenin bir yolu görünmüyor. systemdteklifler systemctl list-timersve systemctl status something.timerfakat bunlardan etkiler göstermeyen AccuracySec=ve saati kayması muhtemelen diğer direktifler.

AccuracySec=1hİki sunucuya ayarlarsanız , her ikisi de her iki sunucudaki aynı zamanlayıcının aynı anda tetikleneceğini bildirir, ancak aslında bir saat arayla başlayabilirler! İki rasgele zamanlayıcının çarpışıp çarpışmadığını bilmek istiyorsanız, hesaplanan son hesaplanan çalışma süresini kontrol etmenin bir yolu yoktur.

Liste zamanlayıcılarının çıktısını daha doğru / daha az kafa karıştırıcı hale getirmek için açık bir sistem sorunu vardır .


Zamanlayıcılar hakkında ilginç bir nokta. Bununla list-timersbirlikte, aldığımız bilgiler , zamanlayıcıları kullanımınızın doğru olup olmadığını anlamak için oldukça iyidir.
Alexis Wilke

1
Benim durumumda değil. İkiz ana bilgisayarlarda tam olarak aynı yapılandırmayı kullanmak istiyorum, ancak her ikisi de aynı anda maintence olmadığından emin olmak için AccuracySec = kullanın. Zamanlayıcıların her bir ana bilgisayarda ne zaman ateşleneceğini görmek istiyorum, ancak yapamıyorum.
Mark Stosberg

Ah. Benzer problemlerim var. Seçilen bir ana (bir oylama sistemi kullanarak) kullanmak istiyorum ve ana bilgisayar 1 için "bakım yapmak" bir mesaj gönderir, bilgisayar 1 tamamlandıktan sonra, yeni durumunu master'a rapor eder, daha sonra bilgisayar 2'den bakımını ister, Bu bilgisayarlardan biri elbette ana olabilir, ancak bakım döngüsünü çalıştıran kodun gerçek bakımdan ayrı olması gerekir. Akılda tutulması gereken bir problem. Kümeniz biraz büyüyecekse , zaman alacağını ve bazı bilgisayarların uzun süre güncellenmeyeceği kadar uzun olabileceğini unutmayın!
Alexis Wilke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.