備忘録

備忘録

systemdをcron代替として利用する方法

Ⅰ. はじめに

タイトルの通り「systemdをcron代替として利用する方法」です。
例として「10秒ごとにecho helloを実行する方法」をこの記事で紹介します。

一時的なスケジュールを簡単に作成する方法はこちら

Ⅱ. やり方

1. サービスユニットファイルを作成する

/etc/systemd/system/Hello.service

[Unit]
Description=Hello service

[Service]
Type=oneshot
ExecStart=echo hello
2. タイマーユニットファイルを作成する

/etc/systemd/system/Hello.timer

[Unit]
Description=Hello timer

[Timer]
# OS起動後10分経過後に実行する
OnBootSec=10min

# OS起動後1時間15分経過後に実行する
# OnBootSec=1hour 15min

# 10秒ごとに実行
OnUnitActiveSec=10s

# タイマー精度
AccuracySec=100ms

# OSが停止等で前回未実行の場合直ちに実行する
# Persistent=true
3. 起動する
systemctl start Hello.timer
4. 状態確認
systemctl list-timers

f:id:kagasu:20210629174213p:plain

結果

10秒ごとに実行されている

$ journalctl -fu Hello
Jun 29 17:42:13 localhost echo[4056]: hello
Jun 29 17:42:13 localhost systemd[1]: Hello.service: Succeeded.
Jun 29 17:42:13 localhost systemd[1]: Finished Hello service.
Jun 29 17:42:23 localhost systemd[1]: Starting Hello service...
Jun 29 17:42:23 localhost echo[4066]: hello
Jun 29 17:42:23 localhost systemd[1]: Hello.service: Succeeded.
Jun 29 17:42:23 localhost systemd[1]: Finished Hello service.
Jun 29 17:42:33 localhost systemd[1]: Starting Hello service...
Jun 29 17:42:33 localhost echo[4080]: hello
Jun 29 17:42:33 localhost systemd[1]: Hello.service: Succeeded.
Jun 29 17:42:33 localhost systemd[1]: Finished Hello service.