crontabの動作をsystemdにて行う。

crontabで設定をすればいいじゃない、ということでやっていなかったのだが 必要に駆られて実施しました。

結果的に以降のメリットは

  • crontab -r の心配がない

デメリットは

  • 1行でさくっと書けない

だと思う。systemdをもっと深く知ると色々できそうな設定があったが crontabの置き換えという意味だとそんなもん。

前提条件

以下の環境をVagrantで作成して検証している。

  • Ubuntu 18.04.5 LTS (Bionic Beaver)

作成手順

まずは対象のディレクトリに移動する

$ cd /etc/systemd/system

以下の2ファイルを作成する。

  • hello.service
  • hello.timer

この時、実行権限からsudoが必要である

$ sudo vi hello.service

hello.serviceの中身

[Unit]
Description=hello service

[Service]
Type=oneshot
ExecStart=/home/vagrant/hello.sh
名称 内容
Description 本serviceファイルの説明
Type cronのかわりの場合はoneshotとして使用でよい。
ExecStart 実行するコマンドを指定。この場合はユーザ直下のhello.shを叩く事になる

hello.timerの中身

[Unit]
Description=hello timer

[Timer]
OnCalendar=*:0/2

[Install]
WantedBy=timers.target               
名称 内容
Description 本timerファイルの説明
OnCalendar 実行するスケジュールを指定している。この場合2分毎を指定している
WantedBy Cronの代わりに使うときはこう、くらいの情報しかなかった。

実行シェルの作成

/home/vagrant/hello.shを作成してこのserviceファイルからこのシェルを叩く

#!/bin/bash
mkdir /home/vagrant/hoge

hogeってディレクトリを作成するだけ

タイマーの有効化

自動起動を有効化して、再起動する。

$ sudo systemctl enable hello.timer
$ sudo reboot

有効化すると以下のようにhello.timerが起動して次の実行日時が登録されている。

timer_list
list

時間が経つとhogeディレクトリが作成されている。