PHP-FPMでプールをrootとして実行しようとしましたが、init.d起動パラメーターを調整できないようです。
これは、CLIからPHP-FPMを起動するときに機能します(Sudo php-fpm7.0 -DRy /etc/php/7.0/fpm/php-fpm.conf
を使用しますが、service
コマンド(Sudo service php7.0-fpm (re)start
)を使用してこれを機能させることはできません。そのため、サーバーが再起動するたびに、PHP-FPM失敗し、このコマンドを実行する必要があります。
/etc/default
の行にDAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R"
でファイル「php-fpm7.0」を配置しようとしました。また、-R
パラメータをdo_start
の/etc/init.d/php7.0-fpm
関数に直接追加しようとしましたが、please specify user and group other than root
エラーが発生し続けます。
起動時およびservice
コマンドでこれを機能させる方法はありますか?
オフトピック:私はすべてのリスクを知っており、なぜそれをすべきでないのかを知っていますが、とにかくやりたいのです。ディレクトリを作成したり、chownコマンドを実行したりするためにいくつかのスクリプトを実行する必要があります。プールは、特定の1つのURLパスでのみプライベート192.168.1.Xネットワーク内から到達可能なnginxサーバーブロックによって使用されるバックエンド専用になります。
別の方法として、PHPスクリプトをrootとして実行するcronスクリプトを設定することもできますが、この方法ではさらに多くの時間がかかります。
ようやく解決策を見つけました。 Ubuntuがsystemd
を使用してPHP-FPMを起動および再起動しているため、init.d
ファイルを無視していることが判明しました。
init.d
ファイルへの調整が無視されて問題が発生し、Ubuntu 15.04以降を使用している場合、そのサービスにsystemd
サービスファイルも含まれている可能性が高くなります。
だから私の問題の修正:私のシステムには/lib/systemd/system/php7.0-fpm.service
という名前のファイルがあり、systemd
によって使用されます。コマンドcat /lib/systemd/system/php7.0-fpm.service
を使用すると、サービスファイルの内容を確認できます。 php7.0-fpm.service
をサービスファイルの名前に置き換えます。 PHP7.0-FPMのサービスファイルは次のようになります。
[Unit]
Description=The PHP 7.0 FastCGI Process Manager
Documentation=man:php-fpm7.0(8)
After=network.target
[Service]
Type=notify
PIDFile=/run/php/php7.0-fpm.pid
ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
私の場合、ExecStart
ルールを調整する必要がありました。 systemdは特定のルールを上書きする方法を提供するため、このファイルを編集する必要はありません。コマンドSudo systemctl edit php7.0-fpm.service
は、それらのルールを入力できるエディターを開きます。調整するルールのセクションを入力して、ファイルを保存するだけです。私の場合は次のようになります:
[Service]
ExecStart=
ExecStart=/usr/sbin/php-fpm7.0 --allow-to-run-as-root --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
最初に編集するルールをリセットしてください。リセットしない場合、両方のルールが実行されます。また、このファイルを保存した後、必ずSudo systemctl daemon-reload
を実行してください。私の場合、Ubuntu 16.04ではrootとしてプールを実行できるようになりました。
systemdシステムでは、system V initスクリプトではなくsystemdを使用してこれを構成する必要がある場合があります
以下の手順は、Ubuntu 16.04 LTSでテストされ、動作しています。そして、これはリダイレクトされたinitスクリプトの犯人です:
/lib/lsb/init-functions.d/40-systemd
1。Edit php-fpmプール構成。 /etc/php/7.0/fpm/pool.d/www.conf
およびrootをユーザー/グループとしてrootを構成します
; Unixユーザー/プロセスグループ ;注:ユーザーは必須です。グループが設定されていない場合、デフォルトのユーザーのグループ ;使用されます。 user = root group = root
2。編集/lib/systemd/system/php7.0-fpm.service
および-RをExecStart
変数に追加して、サービスをrootとして実行できるようにします
ExecStart =/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf -R
。設定を再読み込み
$ systemctl daemon-reload
4。サービスを開始します
$ systemctl start php7.0-fpm
5。確認してください
$ ps auwx | grep php root 32061 0.0 0.0 221680 26084? Ss 16:59 0:00 php-fpm:マスタープロセス(/etc/php/7.0/fpm/php-fpm.conf) root 32063 0.0 0.0 221680 4992? S 16:59 0:00 php-fpm:プールwww root 32064 0.0 0.0 221680 4992? S 16:59 0:00 php-fpm:プールwww