You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Apache2启动时自动运行PHP脚本恢复服务器状态

解决Apache启动时自动运行PHP恢复脚本的问题

让我帮你一步步排查并解决这个问题,先从你当前的配置问题入手,再给你更可靠的替代方案:

一、先修复你/etc/init.d/apache2配置的错误

你当前的修改有两个明显的语法问题,导致脚本根本不会被执行:

  1. 多余的;;符号:do_start()是普通函数,不是case分支,你加的;;是case语句的分隔符,会导致语法错误,Apache启动时会跳过这行命令。把php -q /var/www/scripts/testing.php & ;;改成php -q /var/www/scripts/testing.php &。
  2. restart分支的命令位置错误:你把PHP执行命令放在了esac(case语句结束标记)之后,这行代码永远不会被执行,应该把它移到do_start执行成功的分支里。

除此之外,还要先解决脚本本身的问题:
你的PHP脚本里$timestamp变量没定义,会触发PHP警告,导致日志写入失败。修改脚本:

<?php
$timestamp = date('Y-m-d H:i:s');
file_put_contents('/var/www/html/log', "301,$timestamp,Recreating all connections after restart,N/A\n", FILE_APPEND);
?>

二、必须检查的权限问题

Apache默认以www-data用户运行,所以要确保:

  • 脚本文件有可执行权限:sudo chmod 755 /var/www/scripts/testing.php
  • 日志目录/文件有写入权限:sudo chown www-data:www-data /var/www/html/log
  • 用完整的PHP路径:避免系统找不到PHP命令,先执行which php找到完整路径(比如/usr/bin/php),替换命令里的php。

三、更可靠的方案:用Systemd服务(替代init.d)

init.d已经是比较老旧的启动方式,Systemd更稳定且易维护,不需要用screen/nohup/disown,Systemd本身可以管理进程。

步骤1:创建Systemd服务文件

新建/etc/systemd/system/php-recovery.service,内容如下:

[Unit]
Description=Run PHP recovery script after Apache starts
After=apache2.service
Requires=apache2.service

[Service]
Type=oneshot
User=www-data
Group=www-data
ExecStart=/usr/bin/php -q /var/www/scripts/testing.php
# 把脚本输出写入系统日志,方便排查问题
StandardOutput=journal+console
StandardError=journal+console

[Install]
WantedBy=multi-user.target

步骤2:启用并测试服务

# 重新加载Systemd配置
sudo systemctl daemon-reload
# 设置开机自动启动
sudo systemctl enable php-recovery.service
# 手动测试一次
sudo systemctl start php-recovery.service

验证效果

执行完手动测试后,查看日志文件是否有内容,或者用journalctl -u php-recovery.service查看脚本执行的详细输出,排查是否有错误。

四、快速测试脚本的方法

在调整配置前,先手动以www-data用户运行脚本,验证脚本本身能正常工作:

sudo -u www-data php /var/www/scripts/testing.php

如果日志还是没写入,检查脚本语法:

sudo -u www-data php -l /var/www/scripts/testing.php

内容的提问来源于stack exchange,提问作者Monocito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:43:13