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

远程单命令执行.sh脚本重启Node服务失败,如何解决?

问题原因

手动SSH登录服务器属于交互式登录Shell,系统会自动加载/etc/profile、用户个人的~/.profile或~/.bashrc等配置文件,这些文件里包含了npm的路径配置,因此能正常找到npm命令。

但用单条SSH命令直接执行脚本时,默认是非交互式非登录Shell,不会加载用户个人的环境配置文件——即便脚本里引入了/etc/profile,如果npm的路径没在这个全局配置里,就会出现找不到命令的错误。

解决办法

方法1:让SSH执行时使用登录Shell加载环境

修改SSH命令,用bash -l启动登录Shell来执行脚本,这样会自动加载所有登录时的环境配置:

ssh -tt user@1123.123.123.123 -p 22 'bash -l /home/user/services.sh'

如果你的默认Shell是zsh,就把bash -l换成zsh -l。

方法2:在脚本中使用npm的绝对路径

先手动登录服务器,执行which npm获取npm的绝对路径(比如/usr/local/bin/npm),然后修改services.sh里所有的npm为这个绝对路径,示例:

nohup /usr/local/bin/npm run start:prod &

方法3:在脚本中加载用户个人配置文件

如果npm的路径是在用户个人的~/.bashrc或~/.profile里配置的,在脚本开头添加加载语句:

#!/bin/bash

# 加载全局配置和用户个人配置
. /etc/profile
. ~/.bashrc  # 或者 . ~/.profile,根据实际情况选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:34:51