NodeJS调用Shell脚本时出现ENOENT错误求助
解决 spawn sh /var/www/nodejs/restart-server.sh ENOENT 错误
嘿,这个ENOENT错误我见得挺多的,本质就是系统找不到你指定的那个脚本文件或者路径,我给你列几个排查和解决的步骤,一步步来应该能搞定:
1. 先确认脚本文件是否真的存在
首先得核实这个脚本是不是真的在你说的/var/www/nodejs/restart-server.sh路径下。打开终端跑这个命令检查:
ls -l /var/www/nodejs/restart-server.sh
如果终端提示No such file or directory,那大概率是路径拼写错了(比如是不是把nodejs写成node了?),或者文件被移动、删除了——先把文件找回来或者修正路径再说。
2. 给脚本加上可执行权限
就算文件存在,没有可执行权限也会触发类似问题。跑下面的命令给脚本加上执行权限:
chmod +x /var/www/nodejs/restart-server.sh
加完权限再试试调用脚本。
3. 检查Node.js里spawn的调用写法
有时候问题出在你调用spawn的方式上。如果你之前是这么写的:
spawn('sh /var/www/nodejs/restart-server.sh');
这就错了!spawn的第一个参数是命令,第二个参数得是数组形式的参数。正确的写法应该是:
spawn('sh', ['/var/www/nodejs/restart-server.sh']);
要是你的脚本开头有正确的shebang(比如#!/bin/bash),甚至可以直接调用脚本本身:
spawn('/var/www/nodejs/restart-server.sh');
4. 检查脚本的shebang行
如果脚本开头没有指定解释器,系统可能不知道用啥来执行它。确保脚本第一行是这个:
#!/bin/bash # 或者写 #!/bin/sh,根据你系统的环境选就行
写完记得再确认下脚本有可执行权限(就是步骤2的命令)。
5. 核对绝对路径的大小写和细节
Linux系统是严格区分大小写的,比如NodeJS和nodejs是完全不同的目录。要是你不确定路径对不对,可以先找到脚本所在的目录,跑pwd命令确认绝对路径,再和你代码里写的对比。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

