为PHP-FPM 配置为 systemd 服务

为PHP-FPM 配置为 systemd 服务

  1. 权限问题:PHP-FPM 试图写入日志文件 /usr/local/php/var/log/php-fpm.log 时遇到权限问题。这表明 www-data 用户没有权限写入该日志文件所在的目录。
  2. 配置文件格式错误systemd 消息表明您的服务文件中可能存在格式错误。在 systemd 服务文件中,所有的指令都必须放在正确的部分中。

为了解决这些问题,请按照以下步骤操作:

解决权限问题

  1. 创建日志目录
    如果 /usr/local/php/var/log 目录不存在,您需要创建它:
   sudo mkdir -p /usr/local/php/var/log
  1. 设置正确的权限
    确保 www-data 用户有权访问该目录,并且有权限写入日志文件:
   sudo chown www-data:www-data /usr/local/php/var/log
   sudo chmod 755 /usr/local/php/var/log

修正服务文件格式

  1. 编辑服务文件
    重新编辑 php-fpm.service 文件,确保所有的指令都在正确的部分中:
   sudo nano /etc/systemd/system/php-fpm.service
  1. 确保格式正确
    根据您提供的信息,前几行可能被 systemd 忽略,因为它们没有放在正确的部分中。确保您的服务文件格式如下:
   [Unit]
   Description=The PHP FastCGI Process Manager
   After=network.target

   [Service]
   Type=simple
   PIDFile=/usr/local/php/var/run/php-fpm.pid
   ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
   ExecStop=/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.conf shutdown
   User=www-data
   Group=www-data
   PrivateTmp=true
   ProtectSystem=full
   ProtectHome=read-only

   [Install]
   WantedBy=multi-user.target
  1. 保存并重新加载 systemd 配置
    保存更改并退出编辑器,然后重新加载 systemd 配置:
   sudo systemctl daemon-reload

重新启动服务

  1. 尝试重新启动 PHP-FPM 服务
    再次尝试启动服务,并检查状态:
   sudo systemctl start php-fpm
   sudo systemctl status php-fpm

按照这些步骤操作后,PHP-FPM 应该能够成功启动。如果仍然遇到问题,请根据错误日志中的信息进一步调试。

[Unit]

  • Description: 描述服务的功能,这里是 “The PHP FastCGI Process Manager”。
  • After: 指定服务启动依赖,确保在 syslog.targetnetwork.target 启动之后才启动 php-fpm 服务。

[Service]

  • Type: 指定服务类型,这里是 simple 表示简单的一次性启动服务。
  • PIDFile: 指定 php-fpm 进程的 PID 文件路径,这里是 /usr/local/php/var/run/php-fpm.pid
  • ExecStart: 定义启动 php-fpm 进程的命令,包括 --nodaemonize 参数表示不以守护进程模式运行,以及 --fpm-config 参数指定 php-fpm 配置文件路径。
  • ExecStop: 定义停止 php-fpm 进程的命令,同样使用了 --fpm-config 参数指定配置文件。
  • PrivateTmp: 设置为 true 表示使用私有临时目录。
  • ProtectSystem=full: 这可能就是导致 php-fpm 无法写入日志文件的原因之一。此选项会阻止服务对 /usr 目录及其子目录进行任何写入操作。

[Install]

  • WantedBy=multi-user.target: 指定服务在多用户模式下启动。

需要注意的是:

  • ProtectSystem=full 选项可能会导致 php-fpm 无法写入日志文件,因为 /usr/local/php/var/log 目录通常位于 /usr 文件系统下。您可以尝试注释掉这一行,但请注意这样做会降低系统的安全性。
  • 您也可以通过其他方式解决日志文件写入权限问题,例如修改 /usr/local/php/var/log 目录的权限,或者在 php-fpm.conf 中修改 error_log 指令指向其他可写目录。

建议您根据您的具体情况选择合适的解决方案,并在修改 systemd 服务文件后使用 sudo systemctl daemon-reloadsudo systemctl restart php-fpm 命令重新加载和启动服务。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容