运行一个脚本,并在SSH断开连接(就像断开的管道)后使其处于活动状态,而不在后台强制执行



如果我有一个bash脚本,它就像这个

#!/bin/bash -p
echo "PART A PID $$" >> "txt$$.txt";
for ((a=1; a<=10; a++))
do
sleep 1
echo "PART B$a" >> "txt$$.txt";
done
                                                                 
echo "PART C" >> "txt$$.txt";

我知道./script.sh & disown可以防止SSH退出时脚本停止,但我希望在不需要将脚本放在后台的情况下实现这一点。

PART A
PART B1
PART B2
PART B3
PART B4
PART B5
PART B6
PART B7
PART B8
PART B9
PART B10
PART C

得到这样的输出。

我想等待循环得到有序的输出。

注意(我不想要nohup(

编辑

我这么做是因为我想开始不止一个这样的事情。

如果我做一些类似的事情

#!/bin/bash -p
(
echo "PART A PID $$" >> "txt$$.txt";
for ((a=1; a<=10; a++))
do
sleep 1
echo "PART B$a" >> "txt$$.txt";
done
echo "PART C" >> "txt$$.txt";
) & disown

PID改变。这样,如果我想停止进程,我就无法获得pid的原始引用。

我想知道是否有一些简单的东西可以放在底部,而不会打乱所有的代码

正如您在评论中所解释的,您的真正目标是默认情况下让您的脚本仍然在前台运行,但要确保它能够在SSH断开连接后继续运行。

您可以在不需要disown的情况下完成此操作,尽管代码需要放在顶部,而不是底部

#!/usr/bin/env bash
# redirect all three of stdin, stdout and stderr (not just stdout!)
exec >"txt$$.txt" 2>"err$$.txt" </dev/null
# ignore any SIGHUP signals received
trap : SIGHUP
# ...put the content of your script here

相关内容

最新更新