永远:找不到命令

44

当我在Amazon EC2机器上使用forever命令作为cronjob运行nodejs进程时,出现forever: command not found错误:我使用以下代码的bash脚本:

cd到/nodejs文件的位置

forever start file.js

但是,我可以使用bash script.sh运行此文件,但是当我通过cronjob运行它时,会出现forever:command not found错误。

我很困惑,不知道可能的原因。

有人遇到过这个问题吗?

提前致谢


你需要更加具体地说明。 - adeneo
你使用的是哪种编程语言?请详细说明你的问题。 - Ali Adravi
我正在使用JavaScript。 - azero0
如果您不使用服务器进行验证,任何人都可以对其进行黑客攻击。客户端验证并非真正的验证,您必须使用服务器进行验证。 - PhistucK
我会侵入你的网站 :) - Fisherman
8个回答

60
运行以下命令:npm install forever -g -g 是用于全局安装。

-g 是什么意思?它是如何在 bash 中运行的? - Calamity Jane
7
-g 是为了全局安装。 - nozari
这肯定解决了我的问题。虽然全局执行这个操作不太干净。我想知道是否有更好的解决方案。 - Ryan Walton
安装完毕后,请记得重启控制台。如果您是在本地安装了此模块,最好先卸载它(否则命令会引用本地版本)。 - Semur Nabiev

10
对于其他遇到这个问题的用户:
你需要添加 forever 模块的路径,然后将脚本作为 cronjob 运行。
在 Linux 中,路径通常是:
``` /usr/local/lib/node_modules/forever/bin/forever start file.js ```
只需在你的脚本中使用此命令,错误 "forever:command not found" 就不会再困扰你了。
我知道可能还有其他花哨的方法来解决这个问题,但是我对这种方法感到满意。

5
运行命令 sudo ln -s /usr/local/lib/node_modules/forever/bin/forever /usr/bin/forever 可以创建一个符号链接,使你能够运行 sudo forever ...。该命令的作用是将 forever 命令添加到系统的可执行路径中,从而可以在任何位置运行该命令,而不必指定完整的路径。 - Sators

10

如果 azero0 的解决方案对您不起作用,且您正在运行 Linux,请尝试

sudo npm install forever -g

4

如果您已经尝试过:

sudo npm install forever -g

出现 forever:command not found 错误,需要注意输出中的第一行。此行应该类似于:

/<node_bin_path>/forever -> /lib/node_modules/forever/bin/forever

其中node_bin_path是可执行文件所在的位置。这很可能不是您期望的位置。

这可能是因为您路径中的 node 是一个符号链接。在这种情况下,forever 将被安装在实际的node安装位置而不是符号链接的位置。


我认为我遇到了与此相关的问题。那么解决方案是什么?有一天我运行了 sudo npm config set prefix '~/.npm-global',我认为这是导致问题的原因。 - Vahid
找到解决方案了!使用此链接重置配置:https://dev59.com/GGEi5IYBdhLWcg3w0O-Q#20934521 - Vahid

1

似乎在全局中找不到,使用以下命令解决

npm i forever -g 

0
sudo npm install forever --global

这个方法在Ubuntu 16.04服务器和Node.js v7.5.0上对我有效。


0
你可能最近切换到了 yarn 并使用 yarn 安装了 forever。相反,可以回退到 npm(仅针对 forever): sudo npm install forever -gg == 全局安装)

0
以下的Bash脚本代码检查您的脚本是否在运行。如果没有运行,则停止并启动并发送电子邮件通知。 Crontab
*/1     *       *       *       *       sh /root/yourscriptdirectory/checklive.sh >> /root/yourscriptdirectory/cron.log 2>&1

checklive.sh

chmod +x ./checklive.sh

cd /root/yourscriptdirectory/

ps xa | grep -F "/usr/local/bin/node /root/yourscriptdirectory/script.js"  | grep -Fv "grep"  > /dev/null
if [ $? -eq 0 ]; then
echo ""
else
  echo "script.js not running. Restart"
  /usr/local/bin/node /usr/local/lib/node_modules/forever/bin/forever stop script.js
  /usr/local/bin/node /usr/local/lib/node_modules/forever/bin/forever start script.js
  echo "STOP : script.js Process is stoped restarting..."  | mail -s "STOP : script.js Process is stoped restarting..." "<yourmail@gmail.com>" &
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接