こんにちは、masm11 です。
systemd シリーズの第5回、最終回です。
初回:
前回:
今回は .timer
ファイルについて説明します。
.timer
ファイルとは
以前から Linux/UNIX を管理している方には、cron の代わり、と言うと 話が早いかと思います。前回比較した inetd よりご存知の方は多いのでは ないかと思います。
この unit ファイル中に指定されている日時に、指定されているサービスを 起動するのです。
.timer
ファイルの書き方
[Unit]
セクション
.timer
ファイルも unit ファイルの一種なので、[Unit]
セクションが
あります。
[Unit] Description=ZFS replication timer
こんな感じで良いかと思います。.service
の場合と同様、Description は
ログ出力の際などに使われます。
[Timer]
セクション
.timer
ファイル特有のセクションです。
OnCalendar=hourly
これで、1時間おき (毎正時) に service を起動してくれます。 hourly の他に daily や weekly なども指定できます。
でも、毎正時っていろんな処理が起動して負荷が高くなりがちですよね。 そういう時にはこれです。
AccuracySec=300
指定するのは秒数です。OnCalendar で指定した時刻から、ランダムで AccuracySec までずらしてくれます。
Persistent=true
これを true にしておくと、前回 service を起動した日時をディスクに 保存しておいて、次に timer が start した際 (OS 起動時とか) に 「1回飛ばしてる!」と思ったら、その瞬間、service を起動してくれます。
Unit=foo.service
これは起動する service 名を指定します。 指定しなかった場合は、foo.timer のデフォルトは foo.service に なりますので、大抵の場合は指定しなくて良いと思います。
[Install]
セクション
このセクションを書いておくと、systemctl enable できるようになります。
[Install] WantedBy=timers.target
こう書いておくことが多いと思います。
.timer
ファイルの書き方
そして、起動するサービスも定義しておく必要があります。
サービスですので .service
ファイルに書きます。
[Unit] Description=ZFS replication service After=network.target Requires=network.target [Service] Type=oneshot ExecStart=/etc/systemd/zfs/zfsendsnap.rb zroot/home
ExecStart
にサービスのプログラムを指定します。
[Install]
セクションは不要です。
あとは、
sudo systemctl start foo.timer
とするだけで、指定日時になると service が起動します。
デバッグ
service を開発中で、timer 経由でなく service を直接起動したい場合もあるでしょう。
その場合は、
systemctl start foo.service
で起動することができます。
まとめ
今回は .timer
ファイルの内容について説明しました。
ここまでの5回で、
- systemctl の使い方
.service
の書き方- unit ファイルの編集方法
.socket
の書き方.timer
の書き方
について、具体例として私がよく使う使い方を交えながら説明してきました。 今回でこのシリーズは終わりです。
systemd はなんとも大きなシステムでとっつきにくいですが、 このくらいでも書けると、だいぶん systemd の世界に親しみを感じるようになります。
少しでも参考にしていただけたら幸いです。
では良いお年を!