使用 root 選項自動啟動 PHP-FPM
我試圖讓 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 都會失敗,我必須執行這個命令。我曾嘗試將文件“php-fpm7.0”
/etc/default
與該行一起DAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R"
放入,我什至嘗試直接將-R
參數添加到do_start
函式中/etc/init.d/php7.0-fpm
,但我一直收到please specify user and group other than root
錯誤消息。有什麼辦法可以讓我在啟動時和
service
命令下工作嗎?題外話:我知道所有的風險,我知道為什麼我不應該這樣做,但我還是想這樣做。我需要執行一些腳本來創建目錄、執行 chown 命令等,並且該池將專用於 nginx 伺服器塊使用的後端,該後端只能在一個特定的 URL 路徑上從私有 192.168.1.X 網路中訪問。
作為替代方案,我可以設置一個以 root 身份執行 PHP 腳本的 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 系統上,您可能必須通過 systemd 而不是 system V init 腳本來配置它
以下步驟在 Ubuntu 16.04 LTS 上進行了測試和工作。這是重定向初始化腳本的罪魁禍首:
/lib/lsb/init-functions.d/40-systemd
1. 編輯您的 php-fpm 池配置,例如
/etc/php/7.0/fpm/pool.d/www.conf
,將 root 配置為使用者/組作為 root; Unix 使用者/程序組 ; 注意:使用者是強制性的。如果未設置組,則預設使用者的組 ; 將會被使用。 使用者 = 根 組 = 根
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
3.重新載入配置
$ systemctl 守護程序重載
4.啟動服務
$ systemctl 啟動 php7.0-fpm
5.檢查一下
$ ps auwx | grep php 根 32061 0.0 0.0 221680 26084 ?ss 16:59 0:00 php-fpm:主程序(/etc/php/7.0/fpm/php-fpm.conf) 根 32063 0.0 0.0 221680 4992 ?S 16:59 0:00 php-fpm: 池 www 根 32064 0.0 0.0 221680 4992 ?S 16:59 0:00 php-fpm: 池 www