Redhat 7.xやCentOS 7.x系になり、プロセス起動がinitからsystemdへ変わり
大きく操作感がやLinuxの仕組みが変わった印象がありますね。
今回、Systemdからのサービス起動について勉強しました。
レジュメ
環境・前提条件
- CentOS Linux release 7.3.1611
- kernel 3.10.0-514.el7
で確認しました。
サービスはSystemctl start で起動する。
サービスを起動するには以下のコマンドで実行する。
systemctl start <サービス名>
そして、サービスが起動したか、エラーで終了したかは以下のコマンドで確認する
systemctl status <サービス名>
以下、サンプルサービスとしてchronyd(ntpdに代わる時刻同期サービス)を使用。
サービスの実体ファイルはどこにあるのか?
/usr/lib/systemd/system/<サービス名>.service
にある。
自動起動するサービスは後者の/etc/systemd/system/multi-user.target.wants/内にシンボリックリンクされます。
サービスの実体ファイルのPIDファイルパスを変更してみる
/usr/lib/systemd/system/chronyd.serviceのPIDfileのパスを変更し、systemctl start chronydでサービス起動をすると、数分コマンドプロンプトが戻ってこず待たされた上に、タイムアウトのエラーになる。
なるほど。
※ PIDFile自体をコメントアウトすると、PIDファイルをチェックせずに、正常起動になりました、PIDFileは必ずしも無くても良い設定。
サービス実ファイルとPIDファイルの関係まとめ。
上記の実験より
- Systemdによりサービス実ファイルが実行されると(systemctl start chronyd)
- サービスプロセス自体(chronyd)がPIDファイルを作成し
- Systemdによりサービス実ファイルのPIDFileパスにPIDファイルが出来ていることを確認することでSystemdはサービスプロセスが起動したと判断する。
なるほど、Systemdのサービス開始の仕組みはこうなっているんですね。