一畳のくつろぎタイム

このブログでは紹介する商品画像をAmazonアソシエイトより借りています。画像やリンクにはアフィリエイト広告が含まれる事があります

2019年10月9日水曜日

systemdでtimerの作り方(秒単位の最小限のサンプル)

Qitaのaosho235さんの記事
https://qiita.com/aosho235/items/7656d5568af8f48b2dc1
で、最小限のsystemd Timerの例があり、とても参考になりました。

いくつか検証した結果、もう少し最小限にできたっぽいのと、タイマーの間隔が記載通りにならなくて原因追究にやたらと時間がかかったので、同じ轍を踏む人が減るよう情報を共有したい。


問題点1 タイマー間隔が1分になる。

 aosho235さんの記事通りに作ってみると、tail -fで見ているdateコマンドの出力が1分単位でしか出てこないのだ。

2019年 10月  9日 水曜日 18:51:24 JST
2019年 10月  9日 水曜日 18:52:24 JST
2019年 10月  9日 水曜日 18:53:24 JST

 https://www.freedesktop.org/software/systemd/man/systemd.timer.html
 ここの
AccuracySec=のところを読むと、Defaults to 1min.の記載が、他のサイトも見ていくとcronの仕様に合わせて1分単位になっているとのこと。変更する場合はこの設定を変更しなさいという事だった。

なのでtimerファイルはこのようになった
hoge.timer
[Unit]
Description=hogeService Execute
 
[Timer]
# 精度がcronに合わせて1分なので1秒に
AccuracySec=1
# 初回起動時は起動から3秒後に動作
OnActiveSec=3
# 前回の起動から3秒毎に動作
OnUnitActiveSec=3

Unit=の記載はtimerとserviceの名称が一致する場合は書かなくてもいいらしい。 OnActiveSec=もなくてもいいかと思ったが、 OnUnitActiveSec=はあくまで、前回の起動があっての話で初回起動は欲しいらしい。
[Install] WantedBy=の記載はsystemctrl enableとかブートとか何かのきっかけで起動する必要がなければいらないらしい。
serviceファイルの内容も載せます。
hoge.service
[Unit]
Description=hogeService

[Service]
ExecStart=/home/hoge/hoge.sh


hoge.shはdateコマンドが書いてあるだけです。

起動

[Install]がないのでenableはしなくてよい。startのみ、止めたければstopで
# systemctl start hoge.timer

検証

# systemctl list-timers
とjournalctrl -fや実行されたプログラムの出力を見る journalctrl -fの結果、3秒と指定したが、4秒ごとに出てる、まぁあとは調整ですね。
10月 09 21:55:55 hoge.local systemd[1]: Started hogeService.
10月 09 21:55:59 hoge.local systemd[1]: Started hogeService.
10月 09 21:56:03 hoge.local systemd[1]: Started hogeService.
10月 09 21:56:07 hoge.local systemd[1]: Started hogeService.
10月 09 21:56:11 hoge.local systemd[1]: Started hogeService.