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
タイマーの有効化
自動起動を有効化して、再起動する。
$ sudo systemctl enable hello.timer
$ sudo reboot
有効化すると以下のようにhello.timerが起動して次の実行日時が登録されている。