systemdタイマーが次に実行されるタイミングを知る方法はありますか?

27
2016.12.13

systemdタイマーをテストし、デフォルトのタイムアウトをオーバーライドしようとしていますが、成功しません。次にサービスがいつ実行されるかを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分ごとに1回刻みます。 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
2022.01.09

$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です。