[英]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.