systemdを使ってサービスを登録してみる
#linux #systemd #備忘
これまでWebサーバや24時間動き続けてほしいプログラムはnohup &でバックグラウンド実行してきた。
が、再実行する際にはPIDを調べてkillするなど、ひと手間あってなんだかなーという思いがあった。
でもinit.dは手順見てる限り煩雑そう。
ってことで、init.dの後継にあたるらしい、systemdでサービスを登録してみる。
ユニットファイル
どんなサービスなのか、何を起動するのか、前処理にどんなものがあるか、
などなどを定義するのがユニットファイルと呼ばれるもの。
ユニット定義ファイルと呼ばれることもあるみたい。
参考:
systemd のユニットファイルの作り方 | 晴耕雨読
ユニット定義ファイルの使い方 - Qiita
この辺を参考にして、ひとまずを作った。
code:ci-cd.service
Unit
Description=CI/CD Test # ただの説明
After=network.target # このサービスの起動前に何のサービスが起動している必要があるか
Service
Type=simple # 何をもって起動したかの定義。simpleはExecStartのプログラムが起動できたらOK
Restart=on-success # どんな時に再実行するか。on-successは前回正常終了した場合に行なわれる
ExecStart=/root/ci-cd # どのプログラムを実行するか
Install
WantedBy=default.target # wantディレクトリとか出てくるから別途ぐぐる
ユニットファイルを設置する場所は決まっている。
/etc/systemd/system
lsコマンドで該当ディレクトリをみると、すでにいくつものサービスがあると思う。
そこに設置するだけ。/etc/systemd/system/ci-cd.serviceって感じ。
$ systemctl is-active ci-cd.service
とでもすれば確認できる。
もしエラーがでたなら、
$ systemctl daemon-reload
でリロードすれば大丈夫なはず!
実行ファイルがなかったらどうなる?
ExecStartで指定したプログラムがなかったらどうなるのか。
$ systemctl restart ci-cd.service
$ systemctl status ci-cd.service
ci-cd.service - CI/CD Test
Loaded: loaded (/etc/systemd/system/ci-cd.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2021-06-03 23:40:17 JST; 6s ago
Process: 13154 ExecStart=/root/ci-cd (code=exited, status=203/EXEC)
Main PID: 13154 (code=exited, status=203/EXEC)
6月 03 23:40:17 v133-18-223-4 systemd1: Started CI/CD Test.
6月 03 23:40:17 v133-18-223-4 systemd13154: ci-cd.service: Failed to execute command: No such file or directory
6月 03 23:40:17 v133-18-223-4 systemd13154: ci-cd.service: Failed at step EXEC spawning /root/ci-cd: No such file or directory
6月 03 23:40:17 v133-18-223-4 systemd1: ci-cd.service: Main process exited, code=exited, status=203/EXEC
6月 03 23:40:17 v133-18-223-4 systemd1: ci-cd.service: Failed with result 'exit-code'.
Failed to execute command: No such file or directory
うん、失敗しますね。
まあ何が言いたいかというと、エラー覚悟でとりあえず設置することができるということ。
実行ファイルがある場合
$ systemctl status ci-cd.service
● ci-cd.service - CI/CD Test
Loaded: loaded (/etc/systemd/system/ci-cd.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2021-06-03 23:59:18 JST; 27s ago
Main PID: 15840 (ci-cd)
Tasks: 4 (limit: 1068)
Memory: 1.0M
CGroup: /system.slice/ci-cd.service
└─15840 /root/ci-cd
6月 03 23:59:18 v133-18-223-4 systemd1: Started CI/CD Test.
6月 03 23:59:18 v133-18-223-4 ci-cd15840: こんにちわーるど
うん、期待通り動くね!
めっちゃかんたーん!!
#2021/05/30週
更新履歴
#2021/06/04 おわり
#2021/06/03 書き始め