Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux ssh结束后,继续执行程序_Linux_Ssh - Fatal编程技术网

Linux ssh结束后,继续执行程序

Linux ssh结束后,继续执行程序,linux,ssh,Linux,Ssh,我有一个脚本,它运行一个具有1000个不同参数的可执行文件(每次执行一个参数)。这可能需要很多小时。我在实验室的电脑里运行这个。现在,我通过ssh在家里的电脑上完成这项工作。我可以执行ssh,开始执行脚本,注销,但以某种方式允许脚本继续执行吗 我的意思是实验室的电脑仍然是开放的,我不关心程序的标准。有趣的结果将写入一个文件,我可以在再次登录时检查该文件 我尝试过这样做,但一旦我注销,脚本就会停止执行。因为我无法将问题标记为的副本,因为“重复的问题必须存在于堆栈溢出上”,并且因为我想分享我的经验,

我有一个脚本,它运行一个具有1000个不同参数的可执行文件(每次执行一个参数)。这可能需要很多小时。我在实验室的电脑里运行这个。现在,我通过ssh在家里的电脑上完成这项工作。我可以执行ssh,开始执行脚本,注销,但以某种方式允许脚本继续执行吗

我的意思是实验室的电脑仍然是开放的,我不关心程序的标准。有趣的结果将写入一个文件,我可以在再次登录时检查该文件


我尝试过这样做,但一旦我注销,脚本就会停止执行。

因为我无法将问题标记为的副本,因为“重复的问题必须存在于堆栈溢出上”,并且因为我想分享我的经验,我将回答我自己的问题

tmux
screen
是最佳答案。但是,第一个在我的Debian中没有被识别(可能需要安装),而第二个已经准备好了,并且可以正常工作,对于这个简单的场景:

  • ssh到您的远程设备中。键入
    screen
    ,然后启动所需流程

  • 按Ctrl-A,然后按Ctrl-D。这将“分离”屏幕会话,但保持进程运行。您现在可以从远程框中注销

  • 如果您想稍后回来,请再次登录并键入
    screen-r
    ,这将“恢复”屏幕会话,您可以看到进程的输出

这句话似乎也不错:“我通常会用
screen-S name
来命名屏幕会话,以便以后更容易连接到正确的会话。”



正如deviantfan所说,“
tmux
需要安装。一个简单的
将tmux安装为root就足够了。”

因为我不能将问题标记为的重复,因为“重复的问题必须存在于堆栈溢出上”,并且因为我想分享我的经验,我将回答我自己的问题

tmux
screen
是最佳答案。但是,第一个在我的Debian中没有被识别(可能需要安装),而第二个已经准备好了,并且可以正常工作,对于这个简单的场景:

  • ssh到您的远程设备中。键入
    screen
    ,然后启动所需流程

  • 按Ctrl-A,然后按Ctrl-D。这将“分离”屏幕会话,但保持进程运行。您现在可以从远程框中注销

  • 如果您想稍后回来,请再次登录并键入
    screen-r
    ,这将“恢复”屏幕会话,您可以看到进程的输出

这句话似乎也不错:“我通常会用
screen-S name
来命名屏幕会话,以便以后更容易连接到正确的会话。”



正如deviantfan所说,“
tmux
需要安装。一个简单的
将tmux安装为root就足够了。”

我假设当您尝试时,您使用
myscript&
将它放在后台,然后注销。一些GNU/Linux发行版默认将
SIGHUP
发送到所有以会话tty作为其tty的进程(或者从登录会话中查找进程的其他方式,如父PID树,我忘了)

因此,解决方案是:

nohup myscript &
这真的很容易。在
nohup
下运行时,进程将忽略挂起信号
nohup
将stdin从/dev/null重定向到终端,并将stdout/stderr重定向到
nohup.out
。然后读取
nohup.out
,它将在调用脚本的目录中创建


tmux真的很好,我一直在使用它,但实际上并不需要它。(我实际上使用screen,但那只是因为我开始使用screen时tmux不存在,切换会产生一些重新学习的开销。)

我假设当您尝试时,您使用
myscript&
将它放在后台,然后注销。一些GNU/Linux发行版默认将
SIGHUP
发送到所有以会话tty作为其tty的进程(或者从登录会话中查找进程的其他方式,如父PID树,我忘了)

因此,解决方案是:

nohup myscript &
这真的很容易。在
nohup
下运行时,进程将忽略挂起信号
nohup
将stdin从/dev/null重定向到终端,并将stdout/stderr重定向到
nohup.out
。然后读取
nohup.out
,它将在调用脚本的目录中创建


tmux真的很好,我一直在使用它,但实际上并不需要它。(我实际上使用了screen,但那只是因为我开始使用screen时tmux不存在,切换会带来一些重新学习的开销。)

解释得很好。该死,我在输入问题时检查了重复项。也许这个功能的一个改进就是也可以查看其他相关网站,比如askubuntu。我现在正在阅读链接@fedorqui,我完全同意这一点。我们有多个重复的网站,这就是为什么我总是使用谷歌搜索。我强烈建议你这样做。事实上,一段时间前,在meta askubuntu,但从未回去让它更可见。如果你愿意,就去吧@fedorqui,我在meta上问:解释得很好。该死,我在输入问题时检查了重复项。也许这个功能的一个改进就是也可以查看其他相关网站,比如askubuntu。我现在正在阅读链接@fedorqui,我完全同意这一点。我们有多个重复的网站,这就是为什么我总是使用谷歌搜索。我强烈建议你这样做。事实上,一段时间前,在meta askubuntu,但从未回去让它更可见。如果你愿意,就去吧@fedorqui,我在meta上问:是的,tmux需要安装。一个简单的
apt-get-install-tmux