Linux

使用 root 選項自動啟動 PHP-FPM

  • July 10, 2016

我試圖讓 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

引用自:https://serverfault.com/questions/788669