簡體   English   中英

如何讓我的腳本在 ssh 斷開連接后繼續運行而不強制它進入后台?

[英]How can I make my script keep running after a ssh disconnect without forcing it to be backgrounded?

如果我有一個 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

並獲得這樣的 output。

我想等待周期獲得訂購的 output。

注意(我不想要nohup)

編輯

我這樣做是因為我想開始不止一個。

如果我確實喜歡@Petesh 在答案中說

#!/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM