皆さんこんにちは。構築担当の川合です。
先日からAmazon Linux2 の環境を触りだして、PHPをインストールするコードをamazon-linux-extras に書き換えていっています。
その中で動作確認をしている中で何故かphp-fpmのサービスが自動的に起動していたので調べてみたお話になります。
目次
Extras Library(amazon-linux-extras)とは
本リポジトリを追加する事でOSで標準的に利用できるミドルウェアのバージョンよりも、新しいバージョンのミドルウェアを利用する事が出来るようになります。
PHPを例にだすと、標準で利用出来るバージョンは5.4になります。
Extras Library には、7.2、7.3、7.4、8.0 が含まれていますのでremiのような外部リポジトリを利用せずに新しいバージョンを利用する事が出来ます。
新しいバージョンを利用出来たり、実際に追加するコマンドはCentOS8系のApp Stream に近しいものかと思います。
※利用したいバージョンを有効化してから他のパッケージも入れる流れなど
PHP8.0のインストール
では、まずPHP8.0を利用出来るように以下のコマンドでライブラリを有効化します。
amazon-linux-extras enable php8.0
結果抜粋
51 php8.0=latest enabled [ =stable ]
有効化出来ましたので、上記コマンドの出力結果の下の方に表示されたコマンドでPHP8.0をインストールしてみます。
yum install php-cli php-pdo php-fpm php-mysqlnd
問題なくPHP8.0をインストールすることが出来ました。
php -v
PHP 8.0.2 (cli) (built: Feb 11 2021 18:25:29) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.2, Copyright (c) Zend Technologies
php-fpmのサービスが自動で起動する
その他のミドルウェアもセットアップしていて、一度サーバを再起動しました。
その後、サーバに再度ログインしてみるとphp-fpmのプロセスが稼働していました。
ps aux |grep php-fpm
root 2710 0.0 0.8 178792 16144 ? Ss 12:29 0:00 php-fpm: master process (/etc/php-fpm.conf)
apache 2712 0.0 0.2 178792 5896 ? S 12:29 0:00 php-fpm: pool www
apache 2713 0.0 0.2 178792 5896 ? S 12:29 0:00 php-fpm: pool www
apache 2714 0.0 0.2 178792 5676 ? S 12:29 0:00 php-fpm: pool www
apache 2715 0.0 0.2 178792 5900 ? S 12:29 0:00 php-fpm: pool www
apache 2716 0.0 0.2 178792 5716 ? S 12:29 0:00 php-fpm: pool www
php-fpm のサービス自体は、以下の通りでサービスの自動起動は無効化されています。
systemctl is-enabled php-fpm.service
disabled
ですが、起動状態を確認してみるとサービスは稼働しています。
systemctl status php-fpm.service
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
Active: active (running) since 金 2021-03-12 12:29:13 JST; 4min 5s ago
Main PID: 2710 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/php-fpm.service
├─2710 php-fpm: master process (/etc/php-fpm.conf)
├─2712 php-fpm: pool www
├─2713 php-fpm: pool www
├─2714 php-fpm: pool www
├─2715 php-fpm: pool www
└─2716 php-fpm: pool www
どうやって起動されているのか?
一番最初に思い浮かんだのが、nfsのサービスです。
nfsはサービスを起動する時に必要となるその他のサービスが起動していなければ一緒に起動してくれます。
なので、Apacheのsystemdに関連するファイルでphp-fpmが起動していると思い調査しました。
systemdに関連するファイルは、/etc/systemd/system もしくは /usr/lib/systemd/system に設置されているのでこの辺りを重点的に調査しました。
するとsystemdのhttpd用のディレクトリ配下に以下のファイルが見つかりました。
ls -la /usr/lib/systemd/system/httpd.service.d/
合計 24
drwxr-xr-x 2 root root 26 3月 12 12:20 .
drwxr-xr-x 28 root root 16384 3月 12 12:20 ..
-rw-r--r-- 1 root root 30 2月 12 03:31 php-fpm.conf
ファイルの中身は、以下の通りです。
php-fpmのサービスを要求しているので、httpdのサービス起動のタイミングでphp-fpmのサービスが起動しているようです。httpdは自動起動を有効にしているので、サーバ再起動に合わせて起動したようでした。
cat /usr/lib/systemd/system/httpd.service.d/php-fpm.conf
[Unit]
Wants=php-fpm.service
ただ、起動の際に一緒に起動するだけでhttpdの停止や再起動に連動しないのでphp-fpmのサービスはちゃんと設定しないといけないといけないようです。
ちなみに、php-fpmのパッケージをアンインストールすると上記ファイルは削除されます。
まとめ
調べてみた時はサービスが一緒に起動してくれるので便利だなと思ったのですが、停止や再起動に連動しないのでちゃんとphp-fpmの方も設定してあげる必要があるようでした。
php-fpm を利用する場合は、その他にも起動ユーザなどで設定を変更するかと思いますので自動起動設定などもそのタイミングで設定すればよいかと思います。
ただ、php-fpm を利用しない場合はphp-fpmのパッケージを削除して該当ファイルを消しておく方が管理的にはいいかと思います。
ファイルだけ削除しても、php-fpmをアップデートした場合などにファイルが再生成される可能性も捨てきれないため。
プロフィール
サーバ構築周り全般を対応しております。
LINK
クラウドベリージャム:プロフィールページ