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

如何通过脚本运行Node.js应用?脚本执行报错求助

解决init.d脚本运行Node.js应用找不到命令的问题

咱们一步步拆解你碰到的问题,主要是脚本语法错误和sudo执行时的环境/路径问题:

1. 先修正脚本的语法问题

你原来的脚本把所有命令挤在一行且没做分隔,导致shell把sudo node...全当成了echo的输出参数,根本没真正执行Node命令。先给脚本加上正确的shebang和命令分隔:

#!/bin/bash
echo "Starting node application"
# 注意:你已经用sudo执行整个脚本了,这里不需要再嵌套sudo
/home/pi/.nvm/versions/node/v8.11.3/bin/node /home/pi/PPBot/bot.js
exit 0

重点提醒:你之前写的路径v.8.11.3多了个点,正确路径应该是v8.11.3,这个拼写错误直接会导致找不到命令!

2. 为什么直接命令行能跑,脚本不行?

你用NVM安装的Node是属于pi用户的,当你用sudo执行脚本时,会切换到root用户环境——而root并没有加载NVM的环境变量。哪怕你写了绝对路径,拼写错误或者权限问题(不过root有权限访问pi用户的目录)也会失败。另外,你已经用sudo启动整个脚本了,脚本里再写sudo属于多余的二次权限切换,反而容易出问题。

3. 验证与优化步骤

  • 先手动验证绝对路径是否正确:
    sudo /home/pi/.nvm/versions/node/v8.11.3/bin/node -v
    
    如果能正常输出版本号,说明路径没问题。
  • 给脚本添加执行权限:
    sudo chmod +x /etc/init.d/botscript
    
  • 再次执行脚本尝试启动:
    sudo /etc/init.d/botscript
    

如果想把这个脚本做成标准的init.d服务(支持start/stop),可以参考这个模板:

#!/bin/bash
case "$1" in
    start)
        echo "Starting PPBot..."
        /home/pi/.nvm/versions/node/v8.11.3/bin/node /home/pi/PPBot/bot.js &
        echo $! > /var/run/ppbot.pid
        ;;
    stop)
        echo "Stopping PPBot..."
        kill $(cat /var/run/ppbot.pid)
        rm /var/run/ppbot.pid
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac
exit 0

之后就可以用sudo /etc/init.d/botscript start或stop来管理服务了。

内容的提问来源于stack exchange,提问作者K. Tilman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:00:00