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

如何在自托管GitHub Runner上运行本地已安装的命令?

问题解决:自托管GitHub Runner无法找到主机已安装的pm2

核心原因

自托管GitHub Runner运行作业时的环境变量PATH,和你在主机终端直接操作的用户环境PATH可能不一致,导致全局安装的pm2不在Runner的可执行路径范围内,所以出现"command not found"错误。

解决方案

1. 使用pm2的绝对路径执行

先在主机终端执行which pm2,得到pm2的绝对路径(比如/home/your-user/.npm/bin/pm2),然后在workflow中替换命令:

- run: /home/your-user/.npm/bin/pm2 restart backend_api

2. 手动将pm2路径添加到Runner的PATH中

如果不想写死绝对路径,可以在运行pm2前先导出路径:

- run: export PATH=$HOME/.npm/bin:$PATH
- run: pm2 restart backend_api

注:这里的$HOME/.npm/bin要替换成你主机上pm2实际所在的目录,可通过npm config get prefix查看全局npm包的安装路径,bin目录就在该路径下。

3. 配置Runner的全局环境变量

如果希望所有作业都能直接调用pm2,可以修改自托管Runner的环境配置文件:

  • 找到Runner安装目录下的.env文件(比如/actions-runner/.env)
  • 添加一行:PATH="$HOME/.npm/bin:$PATH"
  • 重启Runner服务,之后所有作业都会加载这个路径

对你疑问的解答

  1. 操作是否有误?
    你的操作没有本质错误,但忽略了自托管Runner的环境变量独立性——Runner进程的PATH不一定包含主机用户的全局npm包路径,导致找不到pm2。

  2. 是否存在动作完成后触发的钩子?
    GitHub Actions本身没有针对作业完成后的内置钩子,但你可以在workflow的步骤末尾添加自定义的收尾步骤;如果需要主机系统级的钩子,可通过主机的服务管理工具(如systemd)配置,这和GitHub Actions本身无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:24:51