PuTTY或OTHER-即使退出PuTTY也要继续执行命令[重复]


13

我有几个需要运行的命令。即使退出界面,这些命令也需要连续运行。当我可以访问Linux GUI时,执行以下操作:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

任何帮助都感激不尽。



有什么理由不将这些服务作为守护程序运行?
SevenSidedDie 2014年

这些命令是应该“永远”在接近100%正常运行时间下运行的服务,还是希望在一段时间后完成的长时间运行的处理任务?对于这两种情况,所有答案都会“起作用”,但是正确的建议将有所不同。
彼得斯(Peteris)2014年

您正在使用哪个特定的Linux发行版?我发现运行set -m;使它成为可能,以便我在CentOS和RHEL上注销后脚本继续运行。
ArtOfWarfare 2014年

Answers:


33

尝试

nohup Background_ScriptX和

nohup确保在关闭终端时不会终止进程。&符号将进程推入后台。

希望这会有所帮助。


nohup确实可以胜任这项工作
Pitto 2014年

很高兴有帮助。
Eamonn Travers,2014年

15
屏幕nohup有一个明显的优势:nohup不允许您返回正在运行的命令(例如,第二天早上阅读其标准输出,然后选择终止它,等等)。 屏幕可以让您做到这一点。
Andreas F

1
nohup将输出发送到可以对其进行处理的文件。
Brian Knoblauch 2014年

对于那些nohup不熟悉的人,基本上是“不挂断”-使用nohup时,挂断(HUP)信号将被忽略。
Dan7119 2014年

20

如果您想稍后再读取输出,可以使用screen

screen -d -m my_command

这为您提供了一个独立的终端,您可以在以后连接到该终端(screen -r)以读取stdout / stderr输出。


2
+1。例如,如果您关闭终端(例如,腻子),然后再次打开它并重新连接到屏幕(screen -r),您还将获得程序产生的所有输出,否则将被“遗漏”。另外,屏幕可以做很多令人惊奇的事情,例如分屏等!:)
Alberto Santini 2014年

6

如果nohup命令不可用,另一种选择是使用disown命令。

首先,您可以通过jobs在终端中运行来查看后台任务。您可以从那里获取工作编号。

现在,只需运行disown %[job number],该过程将与当前终端分离,并在退出时保持活动状态。

旁注:确保您在询问正确的问题。如果在示例中提示您正在运行实际的服务,则可能需要研究如何在所选的OS中创建守护程序。这是为了确保该过程在重新启动后仍能运行,并使它与其他服务更加一致。

希望这可以帮助。


3

由于screen已经提到:还有其他终端多路复用器。我tmux非常喜欢,请参阅其他超级用户问题,例如tmux vs屏幕进行比较。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.