systemdのserviceとpidファイルの関係。systemctl startの仕組み

Redhat 7.xやCentOS 7.x系になり、プロセス起動がinitからsystemdへ変わり
大きく操作感がやLinuxの仕組みが変わった印象がありますね。

今回、Systemdからのサービス起動について勉強しました。

image

環境・前提条件

  • CentOS Linux release 7.3.1611
  • kernel 3.10.0-514.el7

で確認しました。

 

サービスはSystemctl start で起動する。

サービスを起動するには以下のコマンドで実行する。

systemctl start <サービス名>

そして、サービスが起動したか、エラーで終了したかは以下のコマンドで確認する

systemctl status <サービス名>

以下、サンプルサービスとしてchronyd(ntpdに代わる時刻同期サービス)を使用。

image

サービスの実体ファイルはどこにあるのか?

image

/usr/lib/systemd/system/<サービス名>.service

にある。
自動起動するサービスは後者の/etc/systemd/system/multi-user.target.wants/内にシンボリックリンクされます。

サービスの実体ファイルのPIDファイルパスを変更してみる

image

/usr/lib/systemd/system/chronyd.serviceのPIDfileのパスを変更し、systemctl start chronydでサービス起動をすると、数分コマンドプロンプトが戻ってこず待たされた上に、タイムアウトのエラーになる。

なるほど。

※ PIDFile自体をコメントアウトすると、PIDファイルをチェックせずに、正常起動になりました、PIDFileは必ずしも無くても良い設定。

 

サービス実ファイルとPIDファイルの関係まとめ。

上記の実験より

  1. Systemdによりサービス実ファイルが実行されると(systemctl start chronyd)
  2. サービスプロセス自体(chronyd)がPIDファイルを作成し
  3. Systemdによりサービス実ファイルのPIDFileパスにPIDファイルが出来ていることを確認することでSystemdはサービスプロセスが起動したと判断する。

image

なるほど、Systemdのサービス開始の仕組みはこうなっているんですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です