Techniical-support

Amazon Linux2 のExtras LibraryでPHPをインストールするとphp-fpmが自動的に起動する?

皆さんこんにちは。構築担当の川合です。

先日から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をアップデートした場合などにファイルが再生成される可能性も捨てきれないため。

返信を残す

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

CAPTCHA