Ubuntu Server 18.04 LTS。
PHP-FPMでsystemctl restart
を使用しても、/var/run/php/
に必要なソケットは作成されませんが、再起動では作成されます。
再起動せずにサービスを再起動できるようにセットアップを調整するにはどうすればよいですか?
さまざまな年齢のWebアプリで使用するために、単一のサーバー(コンテナーなし)のソースから複数のPHP-FPMインスタンスをコンパイルしています。 PHP 7.1、PHP 7.2 and PHP 7.3互いに並べて設定しました。これらはすべて起動時に正しく起動します、それらはすべて/var/run/php/
にソケットを持ち、ブラウザから期待どおりに応答します。
/var/run/php
の内容/var/run/php$ ls -l
total 0
srw-rw---- 1 www-data www-data 0 Apr 2 12:57 php7.1-fpm.sock
srw-rw---- 1 www-data www-data 0 Apr 2 12:57 php7.2-fpm.sock
srw-rw---- 1 www-data www-data 0 Apr 2 12:57 php7.3-fpm.sock
各サービスは問題なく実行されているようです。次に、それぞれのsystemctl status
出力を示します。
~$ Sudo systemctl status php7.1-fpm
● php7.1-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/etc/systemd/system/php7.1-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 12:57:51 UTC; 21min ago
Main PID: 875 (php-fpm)
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.1-fpm.service
├─875 php-fpm: master process (/etc/php/7.1/etc/php-fpm.conf)
├─970 php-fpm: pool www
└─971 php-fpm: pool www
Apr 02 12:57:51 darwin systemd[1]: Started The PHP FastCGI Process Manager.
~$ Sudo systemctl status php7.2-fpm
● php7.2-fpm.service - The PHP FastCGI Process Manager (7.2)
Loaded: loaded (/etc/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 12:57:51 UTC; 22min ago
Main PID: 837 (php-fpm)
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.2-fpm.service
├─837 php-fpm: master process (/etc/php/7.2/etc/php-fpm.conf)
├─963 php-fpm: pool www
└─964 php-fpm: pool www
Apr 02 12:57:51 darwin systemd[1]: Started The PHP FastCGI Process Manager (7.2).
~$ Sudo systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP FastCGI Process Manager (7.3)
Loaded: loaded (/etc/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 12:57:51 UTC; 23min ago
Main PID: 836 (php-fpm)
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.3-fpm.service
├─836 php-fpm: master process (/etc/php/7.3/etc/php-fpm.conf)
├─965 php-fpm: pool www
└─966 php-fpm: pool www
Apr 02 12:57:51 darwin systemd[1]: Started The PHP FastCGI Process Manager (7.3).
対応するphp.ini
ファイルを変更した場合、変更を処理するためにサービスを再起動する必要があります。私の場合、systemctl restart
(例:Sudo systemctl restart php7.1-fpm
)を使用してサービスを再起動すると、サービスは正常に再起動しているように見えますが、すべてのPHPソケットは削除されます-再起動したバージョン。
systemctl restart
の後にコンソール出力がありません。再起動したサービスでsystemctl status
を確認すると(たとえば、PHP 7.1))、サービスis実行中:
systemctl restart
~$ Sudo systemctl status php7.1-fpm
● php7.1-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/etc/systemd/system/php7.1-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 13:28:06 UTC; 28s ago
Main PID: 1704 (php-fpm)
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.1-fpm.service
├─1704 php-fpm: master process (/etc/php/7.1/etc/php-fpm.conf)
├─1718 php-fpm: pool www
└─1722 php-fpm: pool www
Apr 02 13:28:06 darwin systemd[1]: Stopped The PHP FastCGI Process Manager.
Apr 02 13:28:06 darwin systemd[1]: Started The PHP FastCGI Process Manager.
Active
のタイムスタンプの違いに注意してください。同じ方法で他のサービスにクエリを実行した場合(注:それらは私によって再起動されていない)、タイムスタンプは起動時の最初の開始からのものです。
systemctl restart
の後のPHP 7.2~$ Sudo systemctl status php7.2-fpm
● php7.2-fpm.service - The PHP FastCGI Process Manager (7.2)
Loaded: loaded (/etc/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 12:57:51 UTC; 33min ago
Main PID: 837 (php-fpm)
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.2-fpm.service
├─837 php-fpm: master process (/etc/php/7.2/etc/php-fpm.conf)
├─963 php-fpm: pool www
└─964 php-fpm: pool www
Apr 02 12:57:51 darwin systemd[1]: Started The PHP FastCGI Process Manager (7.2).
systemctl restart
の後のPHP 7.3~$ Sudo systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP FastCGI Process Manager (7.3)
Loaded: loaded (/etc/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 12:57:51 UTC; 34min ago
Main PID: 836 (php-fpm)
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.3-fpm.service
├─836 php-fpm: master process (/etc/php/7.3/etc/php-fpm.conf)
├─965 php-fpm: pool www
└─966 php-fpm: pool www
Apr 02 12:57:51 darwin systemd[1]: Started The PHP FastCGI Process Manager (7.3).
…そして、まだすべてのソケットがありません:
/var/run/php
の後のsystemctl restart
の内容PHP 7.1$ ls -l
total 0
私の直感は、私が.service
ファイルで何かに気づかずにマングルしたことです。トラブルシューティングを行っているときに、PIDとソケットに別のディレクトリを使用していることに気付きました。 /run/php-fpm/
が存在しないため、PIDはnotがブート時に作成されます。ソケットとPIDを同じディレクトリに保持しないようにアドバイスされるという漠然とした記憶がありますが、正確な詳細を思い出せません。
.service
ファイル[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
RuntimeDirectory=php
RuntimePermissions=755
PIDFile=/run/php-fpm/php7.1-fpm.pid
ExecStart=/etc/php/7.1/sbin/php-fpm --nodaemonize --fpm-config /etc/php/7.1/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
ポインタや詳細については、事前にありがとうございます。
さらに調査したところ、ユニットファイルにRuntimeDirectoryPreserve
ディレクティブがないことがわかりました。サービスが停止すると、RuntimeDirectory
がソケットとともに削除されました。
systemd.exec からの抜粋
RuntimeDirectoryPreserve =ブール引数を取るか、再起動します。 no(デフォルト)に設定すると、RuntimeDirectory =で指定されたディレクトリは、サービスの停止時に常に削除されます。サービスを自動および手動で再開したときにディレクトリを再開するように設定されている場合、ディレクトリは保持されます。ここで、自動再起動はRestart =で指定された操作を意味し、手動再起動はsystemctl restart foo.serviceによってトリガーされる操作を意味します。 yesに設定すると、サービスが停止してもディレクトリは削除されません。ランタイムディレクトリ/ runは「tmpfs」のマウントポイントであるため、システムサービスの場合、システムを再起動すると、RuntimeDirectory =で指定されたディレクトリが削除されます。
改訂された(動作中の)ユニットファイル:
[Unit]
Description=The PHP FastCGI Process Manager (7.1)
After=network.target nginx.service
[Service]
Type=simple
RuntimeDirectory=php
RuntimeDirectoryMode=755
RuntimeDirectoryPreserve=yes
PIDFile=/run/php7.1-fpm.pid
ExecStart=/etc/php/7.1/sbin/php-fpm --nodaemonize --fpm-config /etc/php/7.1/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target