我通过putty SSH连接到linux服务器。我试着把它作为后台进程运行,就像这样:
$ node server.js &
然而,2.5小时后,终端变得不活动,进程死亡。有没有办法,我可以保持进程活着,即使终端断开?
编辑1
实际上,我尝试了nohup,但只要我关闭Putty SSH终端或拔掉互联网,服务器进程就会立即停止。
我需要在腻子里做什么吗?
编辑2(2012年2月)
有一个node.js模块,永远存在。它将运行node.js服务器作为守护服务。
我通过putty SSH连接到linux服务器。我试着把它作为后台进程运行,就像这样:
$ node server.js &
然而,2.5小时后,终端变得不活动,进程死亡。有没有办法,我可以保持进程活着,即使终端断开?
编辑1
实际上,我尝试了nohup,但只要我关闭Putty SSH终端或拔掉互联网,服务器进程就会立即停止。
我需要在腻子里做什么吗?
编辑2(2012年2月)
有一个node.js模块,永远存在。它将运行node.js服务器作为守护服务。
当前回答
$ disown node server.js &
它将从活动任务列表中删除命令并将命令发送到后台
其他回答
使用sysv init在debian上以系统服务的形式运行命令:
复制骨架脚本,并适应你的需要,可能你所要做的就是设置一些变量。您的脚本将从/lib/init/init-d-script继承良好的默认值,如果某些内容不符合您的需要-在脚本中重写它。如果出现问题,可以在source /lib/init/init-d-script中查看详细信息。必须的变量是DAEMON和NAME。脚本将使用start-stop-daemon来运行你的命令,在START_ARGS中你可以定义start-stop-daemon的附加参数来使用。
cp /etc/init.d/skeleton /etc/init.d/myservice
chmod +x /etc/init.d/myservice
nano /etc/init.d/myservice
/etc/init.d/myservice start
/etc/init.d/myservice stop
这就是我如何为我的维基媒体维基运行一些python的东西:
...
DESC="mediawiki articles converter"
DAEMON='/home/mss/pp/bin/nslave'
DAEMON_ARGS='--cachedir /home/mss/cache/'
NAME='nslave'
PIDFILE='/var/run/nslave.pid'
START_ARGS='--background --make-pidfile --remove-pidfile --chuid mss --chdir /home/mss/pp/bin'
export PATH="/home/mss/pp/bin:$PATH"
do_stop_cmd() {
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
$STOP_ARGS \
${PIDFILE:+--pidfile ${PIDFILE}} --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
rm -f $PIDFILE
return $RETVAL
}
除了设置变量,我不得不覆盖do_stop_cmd,因为python替代可执行文件,所以服务没有正确停止。
你真的应该尝试使用屏幕。这比仅仅做nohup long_running &要复杂一些,但是一旦你再也不会回来就理解屏幕。
首先启动屏幕会话:
user@host:~$ screen
运行任何你想运行的程序:
wget http://mirror.yandex.ru/centos/4.6/isos/i386/CentOS-4.6-i386-binDVD.iso
按ctrl+A,然后d,完成。您的会话在后台继续进行。
您可以通过screen -ls列出所有会话,并通过screen -r 20673.pts-0.srv命令附加到一些会话,其中0673.pts-0.srv是一个条目列表。
您了解过nohup命令吗?
除了上面提到的很酷的解决方案,我还提到了监督和监控工具,这些工具允许启动进程,监控进程的存在,并在进程死亡时启动进程。使用“monit”,您还可以运行一些主动检查,如检查进程是否响应http请求
简单的解决方案(如果你对返回进程不感兴趣,只想让它继续运行):
nohup node server.js &
还有jobs命令可以查看这些后台进程的索引列表。您可以通过运行kill %1或kill %2来终止后台进程,并将数字作为该进程的索引。
强大的解决方案(允许您重新连接到进程,如果它是交互式的):
screen
然后可以通过按Ctrl+a+d来分离,然后通过运行screen -r来重新连接
还可以考虑screen的更新替代方案tmux。