systemdでcronみたいなこと
環境
- GentooLinux
- systemd
記事と関係ないけど、最近Ubuntuを入れる機会があって、インストールが簡単なこと、みんなが最近(?)sudo ばっかりしていることがよくわかった。gentooはめんどくさいけど、やっぱりなんか好き。
目的
- emerge-webrsync を systemdのタイマーで定期的に実行する
- ユーザー権限で実行する
systemdのファイルの細かいところは方方ドキュメントがあるので適宜検索するとして。
簡単に必要最低限をおまとめしました。
作る必要があるもの
- ~/.local/share/systemd/user ディレクトリ
- ~/.local/share/systemd/user/webemerge.service ファイル
- ~/.local/share/systemd/user/webemerge.timer ファイル
- 場所はどこでもいいので、例えば ~/bin/web-emerge.sh ファイル
流れ
systemdは.timerファイルを作って、その中に任意の作動時間を記載すると、同名の.serviceが起動されるらしい。
書式
webemerge.service
至極単純に。timer起動するものはType=oneshopt
とするらしい。
/path/to/web-emerge.sh を実行するよ、という意味合いのファイル。
[Unit]
Description=weekly emerge webrsync
[Service]
Type=oneshot
ExecStart=/path/to/web-emerge.sh
webemerge.timer
毎週日曜朝3:00に起動するよ、という意味合いのファイル。
Persistent: true/falseを記載。起動タイミングで電源が落ちていたりして起動できなかった場合、起動できる状態になったらすぐ実行したい場合はtrueを設定。あくまでその時間に実行しないとならない場合はfalseを設定。
OnCalendar: 起動タイミングを記載する。
基本的な書式は
[WEEKDAY] <Year>-<Month>-<Day> <HH>:<MM>:<SS>
となる模様。
またmonthly
やweekly
、daily
やhourly
、minutely
など、特殊な書式もある。
下記参考サイトからの引用
minutely → --* ::00
hourly → --* :00:00
daily → *--* 00:00:00
monthly → --01 00:00:00
weekly → Mon --* 00:00:00
yearly → *-01-01 00:00:00
quarterly → *-01,04,07,10-01 00:00:00
semiannually → *-01,07-01 00:00:00
各セクション、カンマ区切りなどで複数指定可能。詳細は下記の参考サイトにて。。
参考:
https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd.time.7.html
※いつも Calender などとtypoしてしまって、うまく動かずハマる。。。
[Unit]
Description=weekly emerge webrsync
[Timer]
Persistent=true
OnCalendar=Sun *-*-* 3:00
[Install]
WantedBy=timers.target
web-emerge.sh
実処理のファイル。今回はシェルで単純に
#!/bin/sh
/usr/bin/sudo /usr/bin/emerge-webrsync
とした
systemd へのインストールなど
--user をつけるとユーザー上のsystemdで動作する。
それ以外はいつもと同じ。
リロード
$ systemctl --user daemon-reload
有効化
$ systemctl --user enable webemerge.timer
無効化
$ systemctl --user disable webemerge.timer
実行
$ systemctl --user start webemerge.timer
状況確認
$ systemctl --user status webemerge.timer