Plesk中Webhook执行npm install与touch tmp/restart.txt命令失败,求正确配置方式
解决Plesk中额外部署动作
npm install不执行的问题 我来帮你排查这个问题——大概率是npm install执行过程中出现了隐性错误(比如找不到命令、权限不足或依赖安装失败),导致后续的touch命令也被中断了。下面是几个针对性的解决方案,你可以逐个尝试:
1. 明确指定npm的绝对路径
Plesk的部署环境PATH变量通常和你手动登录服务器的shell环境不同,很可能找不到npm的位置。先通过SSH登录服务器,执行which npm拿到npm的绝对路径(比如/usr/local/bin/npm),然后把部署命令改成:
/usr/local/bin/npm install && touch tmp/restart.txt
这样就能避免因“找不到npm命令”导致的执行失败。
2. 添加日志输出排查错误
把命令改成带详细日志的形式,方便定位问题根源:
npm install --verbose > deploy-npm.log 2>&1 && touch tmp/restart.txt
部署完成后,去你的网站根目录查看deploy-npm.log文件,里面会记录npm执行的所有细节——比如依赖下载失败、目录权限不足、Node版本不兼容等问题都能在这里找到线索。
3. 检查部署用户的权限
Plesk的部署动作是通过特定系统用户执行的,这个用户可能没有安装npm依赖的权限。你可以尝试两种方式:
- 给部署用户赋予网站根目录的读写权限;
- 如果服务器允许,在命令前添加
sudo(注意要确保部署用户在sudoers列表中,且无需输入密码):sudo npm install && touch tmp/restart.txt
4. 拆分命令并指定工作目录
有时候Plesk的多命令执行环境会出现工作目录不一致的问题,你可以把两条命令分开设置,同时给npm install明确指定网站根目录:
- 第一条部署命令:
(把路径替换成你实际的网站根目录)cd /var/www/vhosts/your-domain.com/httpdocs && npm install - 第二条部署命令:
touch tmp/restart.txt
5. 强制指定Node.js版本
如果服务器上安装了多个Node.js版本,可能npm关联的版本不符合项目要求导致安装失败。你可以直接指定node和npm的路径来执行:
/usr/local/bin/node /usr/local/bin/npm install && touch tmp/restart.txt
或者用npx来确保使用项目指定的npm版本:
npx npm install && touch tmp/restart.txt
优先尝试前两种方案(指定绝对路径+日志排查),基本上能解决80%以上的这类问题。如果日志里显示具体的依赖错误,再针对性处理即可。
内容的提问来源于stack exchange,提问作者South3492
相关产品推荐
相关产品推荐

