为什么在我注销后永远不能保持我的nodejs进程运行?

时间:2012-09-13 03:07:15

标签: node.js ssh forever

我在家中设置了一个Ubuntu服务器,用于托管由nodejs提供服务的Web应用程序。我的服务器上有一个连接应用程序。当我进入并执行类似

之类的操作时
node app.js &> server.log &
logout

然后在我注销后,服务器就像处于保持状态一样,它不会提供任何请求,但是当我重新开始服务时,它会再次开始服务请求。

所以看起来永远的包是为解决这个问题而设计的。所以永远安装并且这样做:

forever start -al forever.log -ao serverout.log -ae servererror.log app.js

我从这个命令得到了相同的结果。我正在服务时,我的服务器将处理请求,但是一旦我注销我的服务器就停止提供请求。我还能做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:0)

考虑使用cron。您可以在bash中运行crontab,但没有选项可以获取您帐户的cron配置。您可能需要root访问权限,然后必须使用-u选项指定用户帐户。有关您的发布实施的更多信息,请参阅man crontab

我确信那里有更好的,但是this是关于cron语法的一个不错的教程。

答案 1 :(得分:0)

我不会将Forever用于此项,而是使用生产就绪工具,例如Supervisord和Monit,请参阅Running and managing nodejs applications on single server

对于每个应用程序,只需创建一个Supervisor配置文件,如下所示:

[program:myapp]
command=node myapp.js                   ; the program (relative uses PATH, can take args)
directory=/www/app/                     ; directory to cwd to before exec (def no cwd)
process_name=myapp                      ; process_name expr (default %(program_name)s)
autorestart=true                        ; whether/when to restart (default: unexpected)
startsecs=1                             ; number of secs prog must stay running (def. 1)
stopwaitsecs=10                         ; max num secs to wait b4 SIGKILL (default 10)
stdout_logfile=/var/log/myapp.log       ; stdout log path, NONE for none default AUTO
stderr_logfile=/var/log/myapp.err.log   ; stderr log path, NONE for none default AUTO

更多信息:NodeJS process management at Brin.gr