systemdで論文要約サイトのバックアップを自動化した話

どうも,学部3年の加藤健吾です.今回は初めての技術系の話題をブログにしてみます.

systemdってなんやねん

皆さんはsystemdってものを聞いたことありますか?僕は今回バックアップの自動化を任せてもらうまで,聞いたことありませんでした.

sysytemdというのは,Linuxの起動時の処理やシステム管理を行う様々な機能を実装したソフトウェア群。だそうです.まあこいつがいるおかげで僕たちはLinuxを快適に使うことができるってことですね.

どうやって自動化したのか

自動化対象の用意

まず,自動化したいシェルスクリプトを用意します.今回僕が自動化したのは,バックアップを行うシェルスクリプトでした.

.timerの作成

次に,.timerというものを作ります.作成する位置としては,/etc/systemd/systemの直下に作成します./etc/systemd/system/ooo.timerという感じです.コマンドとしては,/etc/systemd/systemに移動後に

sudo vim auto-backup.timer

で作成します.

中身はこんな感じです.

[Unit]
Description=auto backup timer for CDSL Paper Review

[Timer]
OnCalendar=0:00
Unit=auto-backup.service

[Install]
WantedBy=timers.target

[Unit]のDescriptionには,この.timerの説明を入れます.

[Timer]のOnCalenderでは,実行間隔の指定をし,Unitでは,後ほど作成する.serviceを指定します.

[Install]のWantedByには,timers.targetと指定することで,タイマーとしてジョブを起動するようにすることができます.

.serviceの作成

次に.serviceというものを作成します.位置や作成方法は.timerと同じです.

中身はこんな感じです.

[Unit]
Description=auto backup Service for CDSL Paper Review
ConditionPathExists=/home/cdsl/backup

[Service]
Type=oneshot
ExecStart=/home/cdsl/backup/backup.sh
Restart=no
Type=simple

[Install]
WantedBy=multi-user.target

[Unit]に書いてあるDescriptionは.timerの時と同じです.ConditionPathExistsには,実行したいシェルスクリプトが入っているディレクトリを記述しています.

[Service]のTypeには,oneshotと指定することで,ExecStartに指定したものが実行されたら成功であるとします.ExecStartには,実行するシェルスクリプトを指定します.Restartはnoと指定し,プロセスの再起動を行わないようにします.Typeはsimpleと指定します.これによって,systemdはプロセスを起動した時点でサービスが立ち上がったとみなします.

[Install]のWantedByには,multi-user.targetと指定します.これは,通常の起動でGUIがない場合でも有効にするというものらしいです.

最後の仕上げ

最後に,これらを有効化していきます

まずはデーモンの再起動をします.

sudo systemctl daemon-reload

タイマーを有効化&スタートします.

sudo systemctl enable ooo.timer
sudo systemctl start ooo.timer

これで完了です!

systemctl list-timers

このコマンドで確認して,ちゃんとあるかどうか確認します.

これで終わりです.

最後に

初めて技術系のブログを書いてみました.技術系のブログってなんか書くの難しい…どうしても説明になっちゃいます.書いている途中で,これQiitaとかesaに書いた方がいいんじゃないか?と思い始めてました.初めて書くってことで許してください.何でもはしません.

今後,何か自動化したいって時にこの記事を思い出してくれればいいなーって思ってます.最後まで読んでくださりありがとうございました.

参考にしたサイト

https://tutorials.tinkink.net/ja/linux/how-to-set-timer-with-systemd.html

コメントを残す