📚

【メモ】systemdでアプリをサービス化

2021/02/03に公開

初めて自作のアプリを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