我通过putty SSH连接到linux服务器.我尝试将其作为后台进程运行,如下所示:
$ node server.js &
Run Code Online (Sandbox Code Playgroud)
但是,2.5小时后终端变为非活动状态并且过程终止.无论如何,即使终端断开连接,我仍然能保持活动状态吗?
编辑1
实际上,我尝试过nohup,但只要关闭Putty SSH终端或拔掉我的互联网,服务器进程就会立即停止.
在Putty有什么我需要做的吗?
编辑2(2012年2月)
永远有一个node.js模块.它将运行node.js服务器作为守护程序服务.
我从我的shell脚本开始后台进程,我想在脚本完成时终止这个进程.
如何从我的shell脚本中获取此进程的PID?据我所知,变量$!包含当前脚本的PID,而不是后台进程.
我正在通过SSH(Putty)在linux机器上工作.我需要让一个进程在夜间运行,所以我想我可以通过在后台启动进程(在命令末尾有一个&符号)并将stdout重定向到文件来做到这一点.令我惊讶的是,这不起作用.一旦我关闭Putty窗口,该过程就会停止.
我怎样才能防止这种情况发生?
我正在寻找一种在iOS应用程序中每n分钟更新一次后台位置的方法.我正在使用iOS 4.3,该解决方案适用于非越狱的iPhone.
我尝试/考虑了以下选项:
CLLocationManager startUpdatingLocation/startMonitoringSignificantLocationChanges:这根据预期在后台工作,基于配置的属性,但似乎不可能强制它每n分钟更新一次位置NSTimer:当应用程序在前台运行但似乎不是为后台任务设计时,是否有效UIApplication:beginBackgroundTaskWithExpirationHandler:据我所知,当应用程序移动到后台而不是实现"长时间运行"的后台进程时,这应该用于在后台完成一些工作(也限制时间).如何实施这些常规后台位置更新?
我写了两个shell脚本a.sh和b.sh. 在a.sh和b.sh中,我有一个无限的for循环,他们将一些输出打印到终端.我想编写另一个调用a.sh和b.sh的脚本,但我希望用户立即重新获得对终端的控制,而不是让脚本无限运行,我想在终端中隐藏输出.
我正在使用Java,我想在我的应用程序中保持servlet不断运行,但我不知道怎么做.我的servlet有一个方法,它每天从数据库中提供用户的计数以及整个数据库中用户的总数.所以我想保持servlet不断运行.
multithreading servlets background-process java-ee scheduledexecutorservice
注意:我不认为这是一个重复的问题,这是一个非背景包,挂起 git 与一个微妙的不同的错误消息.
在我的一个git存储库中,每次调用时(例如)git fetch,git打印:
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
Run Code Online (Sandbox Code Playgroud)
如果我git fetch反复做的话,它似乎每次都会打印出来,即使没有任何变化也无需git fetch做任何事情.这对我来说没有多大意义.它似乎也发生在其他网络操作中,例如git push和git pull.
该命令立即返回到提示,没有进一步的输出,我找不到在我的机器上运行的任何git进程.它似乎只发生在这个存储库中,并且只在这台机器上发生.git config -l | grep gc没有回报.
我该怎么做才能诊断或解决这个问题?
$ git --version
git version 2.0.1
Run Code Online (Sandbox Code Playgroud)
我使用的是OS X 10.9.
处理NodeJS应用程序中的后台进程有什么好处?
场景:在用户向应用程序发布内容后,我想要处理数据,从外部资源请求其他数据等.所有这些都非常耗时,所以我想要它来自req/res循环.理想的情况是拥有一个可以快速转储作业的作业队列,守护程序或任务运行器将始终使用最旧的作业并对其进行处理.
在RoR中,我会用延迟工作这样做.这个API的Node等价物是什么?
在ASP.Net应用程序中,用户单击网页上的按钮,然后通过事件处理程序在服务器上实例化对象,并调用该对象上的方法.该方法转到外部系统来做东西,这可能需要一段时间.所以,我想要做的是在另一个线程中运行该方法调用,以便我可以通过"您的请求已经提交"将控制权返回给用户.我很乐意这样做,虽然用户可以继续轮询对象的状态,但它会更好.
我不知道的是,即使用户会话过期,IIS是否允许我的线程继续运行.想象一下,用户触发事件并在服务器上实例化对象并在新线程中触发该方法.用户对"您的请求已提交"消息感到满意并关闭其浏览器.最终,此用户会话将在IIS上超时,但该线程可能仍在运行,正在运行.IIS会允许线程继续运行还是会在用户会话到期后将其终止并处理掉对象?
编辑:从答案和评论,我知道这样做的最好方法是将长时间运行的处理移到IIS之外.除了其他一切,这涉及appdomain回收问题.在实践中,我需要在有限的时间内完成版本1并且必须在现有框架内工作,因此希望避免服务层,因此希望在IIS内部启动线程.实际上,这里的"长时间运行"只需几分钟,网站上的并发性很低,所以应该没问题.但是,下一个版本肯定需要拆分成一个单独的服务层.
我正在使用程序协同与ssh隧道
它工作,我只需打开一个控制台类型这两个命令:
ssh -f -N -L localhost:12345:otherHost:12345 otherUser@OtherHost
synergyc localhost
Run Code Online (Sandbox Code Playgroud)
因为我很懒,我制作了一个Bash-Script,只需点击一下图标即可运行:
#!/bin/bash
ssh -f -N -L localhost:12345:otherHost:12345 otherUser@OtherHost
synergyc localhost
Run Code Online (Sandbox Code Playgroud)
上述与bash脚本工作为好,但现在我也想杀死协同效应,并通过鼠标点击一个SSH通道,所以我必须协同和ssh的PID保存到文件后,杀死他们:
#!/bin/bash
mkdir -p /tmp/synergyPIDs || exit 1
rm -f /tmp/synergyPIDs/ssh || exit 1
rm -f /tmp/synergyPIDs/synergy || exit 1
[ ! -e /tmp/synergyPIDs/ssh ] || exit 1
[ ! -e /tmp/synergyPIDs/synergy ] || exit 1
ssh -f -N -L localhost:12345:otherHost:12345 otherUser@OtherHost
echo $! > /tmp/synergyPIDs/ssh
synergyc localhost
echo $! > /tmp/synergyPIDs/synergy
Run Code Online (Sandbox Code Playgroud)
但是这个脚本的文件是空的.
如何获得ssh和协同作用的PID?
(我尽量避免ps aux | grep ... …