動かざることバグの如し

近づきたいよ 君の理想に

Systemd設定のType=simpleとは何か

環境

systemdのtypeとは

systemdで自作サービスを作ろうとすると出てくる type=simple のオプション。

今までは脳死で設定していたがふとこのオプションの意味が気になったので調べてみた。

systemdのサービスの設定において、Typeオプションはサービスの動作形態を指定するオプションです。

Type=simpleを指定した場合、systemdはこのサービスがバックグラウンドで動作しているプロセスを1つだけ持つことを期待します。サービスが開始されると、systemdはプロセスを開始し、そのプロセスが終了すると、サービスが停止したと判断します。

一方、Type=simpleを指定しない場合、systemdはサービスがフォークされることを期待します。つまり、サービスは1つ以上の子プロセスを持つことができ、systemdはサービスを開始した後、子プロセスが存在する限り、サービスが実行され続けていると判断します。

したがって、Type=simpleを指定する場合は、サービスが単一のプロセスを持つ単純なタスクである場合に適しています。一方、Type=simpleを指定しない場合は、複数のプロセスを必要とする複雑なタスクに適しています。

simple以外のオプション一覧

  • simple: 単純なバイナリで構成されたサービスに使うよ。systemdがサービスを起動して、プロセスが終了するまで待って、必要に応じて再起動するよ。
  • forking: サービスがフォークして実行される場合に使うよ。systemdがサービスを起動して、子プロセスが開始するのを待って、プロセスが終了したら再起動するよ。
  • oneshot: サービスが単一のジョブを実行して終了する場合に使うよ。systemdがサービスを起動して、ジョブが完了するまで待って、ジョブの終了コードによって再起動するかどうかを決めるよ。
  • dbus: D-Busインタフェースを持つサービスに使うよ。systemdがサービスを起動して、D-Busインタフェースに対するリクエストが発生したら応答するよ。
  • notify: サービスが起動したことをsystemdに通知する場合に使うよ。systemdがサービスを起動して、プロセスが終了するまで待って、プロセスが終了したら再起動するかどうかを決めるよ。