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

Ubuntu中PHP执行Shell命令提示命令未找到的问题求助

问题分析与解决

1. 解决 source: not found 错误

shell_exec() 默认调用系统的sh shell,而source是bash专属的内置命令(sh如dash没有这个命令)。可以通过两种方式解决:

  • 强制用bash执行命令:
    shell_exec("/bin/bash -c 'source ~/.bashrc && 你的后续命令'");
    
  • 改用sh兼容的语法(注意:如果.bashrc里有bash专属语法,可能无法正常解析):
    shell_exec(". ~/.bashrc");
    

2. 解决 pm2: not found 错误

PHP执行shell命令时的环境变量PATH和你登录服务器时的PATH不一致,导致系统找不到pm2的可执行文件。解决思路有三种:

  • 使用绝对路径执行:先登录服务器执行which pm2,得到pm2的绝对路径(比如/usr/local/bin/pm2),然后修改脚本:
    shell_exec("/usr/local/bin/pm2 restart 3");
    
    (注意:你原命令里的restrat是拼写错误,正确是restart)
  • 手动指定PATH:把pm2所在的目录加到命令的PATH中:
    shell_exec("PATH=/usr/local/bin:$PATH pm2 restart 3");
    
    (替换/usr/local/bin为实际的pm2所在目录)
  • 用登录shell加载完整环境:让bash以登录shell模式启动,自动加载.bashrc/.profile等配置,获取完整的PATH:
    shell_exec("/bin/bash -l -c 'pm2 restart 3'");
    

核心原因总结

PHP通过shell_exec()执行命令时,会使用非交互式的sh环境,和你手动登录服务器时的bash登录shell相比:

  • 默认使用的shell类型不同
  • 环境变量(尤其是PATH)不包含用户自定义的路径配置

通过调整命令的执行方式,让它使用bash或加载完整环境变量,就能解决这类"命令找不到"的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:12:15