📚
【メモ】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