📚
【メモ】systemdでアプリをサービス化
初めて自作のアプリをsystemdのサービスに登録したので、忘れないうちにメモを残しておきます。
参考サイト一覧
サイト | 用途 |
---|---|
これからSystemd入門する: from Qiita @bulesDD 氏 | Systemdの概要とserviceファイルの書き方が知りたい |
Systemdを使ってさくっと自作コマンドをサービス化してみる: from Qiita @DQNEO 氏 | 同上 |
man systemd.service 日本語訳: from Qiita @JhonnyBravo 氏 | [Service]セクションで設定するオプションの意味を知りたい |
sytemd.kill(5): from archlinux | プロセスの終了パターンを知りたい |
SINGAL(7): from archlinux | stopするときにどのSIGNAL送ったらいい? |
Services remain in failed state after stopped with systemctl: from serverfault | 正しく終了してるはずなのに、systemctl stopがfailedになってる |
色々見たけれど、今後も使えそうなのややっぱり公式のマニュアルですね。
man大事。日本語訳はほんとありがたい。
ハマった所
やってみないとわからないこともある。
[Service]セクション
Typeはどれがいい?
- マルチプロセス形式のDaemonなら
forking
- スレッドやイベンド駆動(シングルプロセス)形式のDaemonなら
simple
どうやってサービスを終了させる?
- マルチプロセス形式なら
KillMode=control-group KillSignal=SIGTERM (デフォルトなので書かなくても良い) SendSIGHUP=yes
- スレッドやイベンド駆動(シングルプロセス)形式
KillMode=process KillSignal=SIGTERM (デフォルトなので書かなくても良い) SendSIGHup=no (同上)
stopがなぜかfailedになる。
Java特有の問題でExitCodeが通常とは異なることが原因。
SuccessExitStatus=143
を記載してあげるとうまくいく。
Discussion