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

使用nohup持续运行多个PHP脚本并生成独立日志的权限问题及实现方法求助

nohup持续运行多个PHP脚本并生成独立日志的权限问题及实现方法求助

我明白你现在的需求——要让5个PHP脚本在后台持续运行,即使关掉终端也不中断,每个脚本还要生成自己的日志文件,但遇到了权限问题对吧?先帮你分析下你之前遇到的错误,再给你一套可行的解决方案。

先分析你遇到的权限错误原因

  • 第一个命令sudo nohup php send-mail.php > mail.txt:这里的sudo只作用于nohup和php命令,但重定向符号>是由当前普通用户执行的。如果当前目录你没有写入权限,就会触发Permission denied,因为写入mail.txt的操作没用到sudo权限。
  • 第二个命令nohup php send-mail.php > sudo mail.txt:这是命令语法错误,重定向后面不能加sudo,系统会误以为你要把输出写到名为sudo的文件,同时把mail.txt当作额外参数,自然会报错。

正确的实现方案

根据你的脚本是否需要root权限,分两种情况处理:

情况1:脚本不需要root权限即可运行

直接在你有写入权限的目录(比如用户家目录~/)执行命令,或者指定一个有权限的路径存储日志:

nohup php /path/to/your/send-mail.php > ~/mail.log 2>&1 &

参数解释:

  • 2>&1:把错误输出也重定向到日志文件,这样脚本的正常输出和错误信息都会被记录下来
  • 末尾的&:让命令在后台运行(nohup本身已支持后台,加&更稳妥)

要同时运行5个脚本,逐个执行即可:

nohup php /path/to/script1.php > ~/script1.log 2>&1 &
nohup php /path/to/script2.php > ~/script2.log 2>&1 &
nohup php /path/to/script3.php > ~/script3.log 2>&1 &
nohup php /path/to/script4.php > ~/script4.log 2>&1 &
nohup php /path/to/script5.php > ~/script5.log 2>&1 &

情况2:脚本必须用root权限运行

如果脚本需要root权限才能执行,要让重定向操作也以root身份执行,推荐用以下两种方法:

  • 方法一:用sudo sh -c包裹整个命令,确保所有操作都用root权限:
sudo sh -c "nohup php /path/to/send-mail.php > /var/log/mail.log 2>&1 &"

可以把日志放到系统日志目录(比如/var/log/),root默认有权限写入这里。多个脚本同理:

sudo sh -c "nohup php /path/to/script1.php > /var/log/script1.log 2>&1 &"
sudo sh -c "nohup php /path/to/script2.php > /var/log/script2.log 2>&1 &"
sudo sh -c "nohup php /path/to/script3.php > /var/log/script3.log 2>&1 &"
sudo sh -c "nohup php /path/to/script4.php > /var/log/script4.log 2>&1 &"
sudo sh -c "nohup php /path/to/script5.php > /var/log/script5.log 2>&1 &"
  • 方法二:先创建日志文件并修改权限(相对繁琐):
    1. 先创建日志文件:sudo touch /var/log/mail.log
    2. 修改文件权限让当前用户可写:sudo chown your_username:your_username /var/log/mail.log
    3. 再运行nohup命令:sudo nohup php send-mail.php > /var/log/mail.log 2>&1 &

实用小技巧

  • 查看后台运行的PHP脚本:用ps aux | grep php找到进程信息
  • 停止某个脚本:找到进程PID(ps aux输出的第二列),执行kill PID;如果无法终止,用kill -9 PID强制停止
  • 若需要脚本开机自动运行,可以把命令添加到crontab(@reboot 前缀),或者配置成systemd服务(更稳定,适合长期运行)

备注:内容来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:57:41