我正在通过SSH (Putty)在Linux机器上工作。我需要让一个进程在夜间运行,因此我认为可以通过在后台启动该进程(在命令末尾使用&号)并将stdout重定向到一个文件来实现这一点。
令我惊讶的是,这行不通。只要我关闭Putty窗口,进程就会停止。
我怎样才能防止这种情况发生?
我正在通过SSH (Putty)在Linux机器上工作。我需要让一个进程在夜间运行,因此我认为可以通过在后台启动该进程(在命令末尾使用&号)并将stdout重定向到一个文件来实现这一点。
令我惊讶的是,这行不通。只要我关闭Putty窗口,进程就会停止。
我怎样才能防止这种情况发生?
当前回答
如果你想同时运行X个应用程序,可以使用xpra和“screen”。
其他回答
如果您想将详细信息记录到一个文件中,Nohup非常有用。但当它进入后台时,如果你的脚本要求,你无法给它一个密码。我想你一定要试一下屏幕。它是一个实用工具,你可以使用yum安装在你的linux发行版上,例如在CentOS上yum安装屏幕,然后通过putty或其他软件在你的shell类型屏幕上访问你的服务器。它将打开屏幕[0]在腻子。做好你的工作。你可以在同一个putty会话中创建更多的screen[1], screen[2]等。
你需要知道的基本命令:
启动屏幕
屏幕
创建下一个屏幕
ctrl + a + c
移动到您创建的下一个屏幕
ctrl + a + n
要分离
ctrl + a + d
在工作期间关闭腻子。下次当你登录通过putty类型
屏幕- r
重新连接到屏幕,您可以看到您的进程仍在屏幕上运行。要退出屏幕,输入#exit。
欲了解更多细节,请参阅男子界面。
在基于debian的系统上(在远程机器上) 安装:
Sudo apt-get install tmux
用法:
tmux 运行您想要的命令
重命名会话:
按Ctrl+B然后$ 集名称
退出会话:
按Ctrl+B然后D
(这会留下tmux会话)。此时可以退出SSH。
当您需要再次返回/检查它时,启动SSH,并输入
Tmux附加session_name
它将带您回到tmux会话。
在systemd/Linux上,systemd-run是一个很好的工具,可以启动与会话无关的进程。
使用屏幕。它使用起来非常简单,就像终端的vnc一样。 http://www.bangmoney.org/presentations/screen.html
当会话关闭时,进程接收到SIGHUP信号,但它显然没有捕捉到这个信号。您可以在启动进程时使用nohup命令,或者在启动进程后使用bash内置命令disown -h来防止这种情况发生:
> help disown
disown: disown [-h] [-ar] [jobspec ...]
By default, removes each JOBSPEC argument from the table of active jobs.
If the -h option is given, the job is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell receives a
SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all
jobs from the job table; the -r option means to remove only running jobs.