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

通过Bitbucket Pipelines SSH远程执行PHP命令时找不到PHP的问题

问题解决:Bitbucket Pipelines SSH执行脚本提示php: command not found

核心原因

你遇到的问题本质是交互式SSH会话与非交互式SSH会话的环境变量加载逻辑差异:

  • 本地手动SSH登录服务器属于交互式登录shell,会加载~/.bashrc、/etc/bash.bashrc等配置文件,这些文件通常会把PHP的路径添加到$PATH中。
  • Bitbucket Pipelines通过ssh-run执行命令属于非交互式非登录shell,默认只会继承基础环境变量,不会加载~/.bashrc这类交互式配置,导致$PATH中缺少PHP的路径,因此找不到php命令。

验证方法

可以在Bitbucket的COMMAND里添加echo $PATH和which php,对比本地SSH登录后的输出,就能直观看到PATH的差异,以及PHP的实际绝对路径。比如在本地执行which php,可能得到类似/opt/plesk/php/8.0/bin/php的路径。

解决方案

方案1:临时在SSH命令中添加PHP路径

直接在执行的命令前临时扩展$PATH,把PHP的实际路径加进去,修改bitbucket-pipelines.yml中的COMMAND:

COMMAND: 'export PATH=$PATH:/opt/plesk/php/8.0/bin && php -v && cd drupal && git pull && cd scripts/deploy && ./deploy_dev.sh'

注意:把/opt/plesk/php/8.0/bin替换成你本地which php得到的实际路径。

方案2:修改远程服务器的非交互式shell配置

让非交互式shell也加载包含PHP路径的配置文件:

  1. 登录远程服务器,编辑~/.bashrc文件,在开头添加以下内容:
    # 让非交互式shell也加载当前配置
    if [[ $- != *i* ]]; then
        source ~/.bashrc
        exit
    fi
    
  2. 把PHP的路径添加到~/.profile文件中(非交互式shell会读取该文件):
    export PATH=$PATH:/opt/plesk/php/8.0/bin
    
    同样替换为实际的PHP路径。

方案3:修改deploy_dev.sh脚本,使用PHP绝对路径

直接在deploy_dev.sh脚本中,把所有php命令替换成PHP的绝对路径,比如:

# 原命令
php some-script.php

# 修改后
/opt/plesk/php/8.0/bin/php some-script.php

方案4:利用Plesk自带的PHP命令(针对Plesk环境)

Plesk提供了plesk php命令可以直接调用对应版本的PHP,你可以尝试在命令或脚本中用plesk php代替php,比如:

COMMAND: 'plesk php -v && cd drupal && git pull && cd scripts/deploy && ./deploy_dev.sh'

如果需要指定特定版本,还可以用plesk php8.0这类命令(根据你的PHP版本调整)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:47:18