何故かApacheを再起動したらPHP-FPMが起動してきた
はじめに
こんにちは。kkです。
Apacheを再起動したときに、「停止させていたはずのPHP-FPMが何故か起動している」
なんてことはありませんか。
私は以前にApacheをPreforkで起動させていたので、PHP-FPMが不要と思い停止していたのですが、
いつの間にか起動しているといったことがありました。
今回はその理由についてお話していきます。
ちなみに今回はApacheとPHP-FPMを例に出してお話していきますが、
他のサービスで同様の事例を確認した場合は本理由と同じ可能性があるので
ぜひ参考にしてみてください。
なお今回はsystemdにて管理されているApacheやPHP-FPMを例に出してお話していきます。
ホントにPHP-FPMが起動してくるなんてことある?
まずはホントにPHP-FPMが停止している場合でも、Apacheを再起動すると
PHP-FPMが起動してくるのか確認してみましょう。
ApacheはPreforkとして起動しているので、PHP-FPMを停止してみます。
[root@localhost ~]# httpd -V | grep “MPM”
Server MPM: prefork
[root@localhost ~]# php -v
PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies
[root@localhost ~]# systemctl stop php-fpm
[root@localhost ~]#
それではApacheを再起動してみましょう。
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]#
[root@localhost ~]# systemctl status php-fpm
● php-fpm.service – The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; preset: disabled)
Active: active (running) since Mon 2024-06-10 09:27:19 JST; 5s ago
Main PID: 14538 (php-fpm)
Status: “Ready to handle connections”
Tasks: 6 (limit: 5524)
Memory: 12.9M
CPU: 61ms
CGroup: /system.slice/php-fpm.service
tq14538 “php-fpm: master process (/etc/php-fpm.conf)”
tq14539 “php-fpm: pool www”
tq14540 “php-fpm: pool www”
tq14541 “php-fpm: pool www”
tq14542 “php-fpm: pool www”
mq14543 “php-fpm: pool www”
Jun 10 09:27:19 localhost systemd[1]: Starting The PHP FastCGI Process Manager…
Jun 10 09:27:19 localhost systemd[1]: Started The PHP FastCGI Process Manager.
停止させていたはずのPHP-FPMが起動していますね、、、
再起動させたのはApache(httpd)のみのはずですがなぜなのでしょうか。
勝手にPHP-FPMが起動してきた理由
端的に理由を述べると、systemdの設定となります。
それでは詳細を少し見てみましょう。
systemctl cat コマンドにてApache(httpd)の設定を確認してみましょう。
すると何やらPHP-FPMに関する記載がありますね。
[root@localhost ~]# systemctl cat httpd.service
~省略
/usr/lib/systemd/system/httpd.service.d/php-fpm.conf
[Unit]
Wants=php-fpm.service
この Wants という設定は特定のサービスを開始した場合に、指定されたサービスもアクティブに
してほしいといった設定です。
この設定があるのでApacheを再起動した際にPHP-FPMも起動するのです。
なおsystemctl list-dependenciesコマンドにてサービスの依存関係を確認できるので、
こちらでもApache(httpd)とPHP-FPMの関係を確認可能です。
[root@localhost ~]# systemctl list-dependencies httpd.service
httpd.service
~
● └php-fpm.service
~
※長くなってしまうので、省略させていただいています。
ぜひご自身の環境にて試してみてください。
それじゃあ勝手に起動しないようにするには?
このままでは停止させておきたい場合、毎回手動で停止する必要が出てきて
非常に面倒ですよね、、、
そのためこちらの設定を削除していきましょう。
先ほどsystemctl catコマンドを実行した際に、ファイル名が表示されていたかと思います。
お察しの通り、こちらが設定ファイルとなりますのこちらを削除またはmvをすればいいだけです。
[root@localhost ~]# mv /usr/lib/systemd/system/httpd.service.d/php-fpm.conf /root/
[root@localhost ~]#
再度systemctl catコマンド実行すると 、”systemctl daemon-reload‘を実行しろと
表示されるので実行します。
[root@localhost ~]# systemctl cat httpd.service
Warning: httpd.service changed on disk, the version systemd has loaded is outdated.
This output shows the current version of the unit’s original fragment and drop-in files.
If fragments or drop-ins were added or removed, they are not properly reflected in this output.
Run ‘systemctl daemon-reload’ to reload units.
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]#
こちらを実行するとApache(httpd)を再起動してもPHP-FPMが起動してこなくなります。
ちなみにsystemctl cat コマンドやsystemctl list-dependenciesコマンドにもPHP-FPMに関する設定が
表示されなくなるのでぜひ試してみてください。
[root@localhost ~]# systemctl stop php-fpm
[root@localhost ~]#
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]#
[root@localhost ~]# systemctl status php-fpm
○ php-fpm.service – The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; preset: disabled)
Active: inactive (dead)
Jun 10 08:58:30 localhost systemd[1]: Starting The PHP FastCGI Process Manager…
Jun 10 08:58:30 localhost systemd[1]: Started The PHP FastCGI Process Manager.
Jun 10 09:26:56 localhost systemd[1]: Stopping The PHP FastCGI Process Manager…
Jun 10 09:26:56 localhost systemd[1]: php-fpm.service: Deactivated successfully.
Jun 10 09:26:56 localhost systemd[1]: Stopped The PHP FastCGI Process Manager.
Jun 10 09:27:19 localhost systemd[1]: Starting The PHP FastCGI Process Manager…
Jun 10 09:27:19 localhost systemd[1]: Started The PHP FastCGI Process Manager.
Jun 10 10:01:36 localhost systemd[1]: Stopping The PHP FastCGI Process Manager…
Jun 10 10:01:36 localhost systemd[1]: php-fpm.service: Deactivated successfully.
Jun 10 10:01:36 localhost systemd[1]: Stopped The PHP FastCGI Process Manager.
おわりに
いかがだったでしょうか。
今回は自分が遭遇して少し不思議に思った事例を紹介してみました。
皆さんも停止したはずなのにいつの間にか起動しているサービスを発見した場合は、
本事象のことも少し疑ってみてください。
以上となります。ありがとうございました。