Shell

另一個稱為腳本即使給出 & 也不會進入後台

  • July 3, 2020

我有 2 個腳本。

我在裡面呼叫我script2的 as ,它使用,和命令 的組合壓縮文件一次16 個文件。它基本上是一個集成的文件觀察程序腳本,用於在檢查文件是否存在後執行下面的過程。(不是cron)sh scriptpath/script2.sh &``script1``find``xargs``gzip

參考:https ://it.toolbox.com/question/file-watcher-script-070510

find ${Filepath}/ -maxdepth 1 -type f -name "${Pattern}" -print0 | xargs -0 -t -n 1 -P 16 gzip > /dev/null

呼叫我的腳本 2 後,它掛在上面的命令中。

Script1 會話正在關閉,並且 script2 的 shell 正在以上述命令狀態打開。我需要在後台而不是前台執行第二個腳本的 gzip 命令。

Script1 - 生成少量文件。導出要在 script2 中使用的變數

然後呼叫 script2 as sh script2 needed parameters &(& 推動 script2 進入後台) 並script1完成,但在腳本 2 找到一個觸摸文件之後。它開始執行。script2但是找到觸摸文件後執行的提示gzip正在進入前台。

Script2 Gunzips 在呼叫腳本 2 之前創建的文件

fileflag=0
timer1=0
check_interval=300 # check every 5 minutes
(( check_interval_minutes=${check_interval}/60 ))
while [ ${timer1} -lt 180 ]
do
if [ -f /path/to/my/file ]
then
find ${Filepath}/ -maxdepth 1 -type f -name "${Pattern}" -print0 | xargs -0 -t -n 1 -P 16 gzip > /dev/null
else
sleep ${check_interval}
fi
(( timer1=${timer1} ${check_interval_minutes} ))
done

xargs -t寫入stderr. 你的> /dev/null不影響stderr。因此,您正在從後台程序寫入終端,這通常是一個壞主意。

如果您希望 find/gzip 過程在後台發生,您可以使用以下方法在後台執行整個塊:

( find ${Filepath}/ -maxdepth 1 -type f -name "${Pattern}" -print0 | xargs -0 -t -n 1 -P 16 gzip > /dev/null ) &

但是,根據所有這些 gzip 程序完成所需的時間,這可能是不明智的,如果它花費的時間超過腳本執行之間的時間間隔,那麼最終可能會有多個程序嘗試壓縮同一個文件。

你可能會更好地使用類似的東西inotifywatch來觀察文件出現的目錄並壓縮它們。

引用自:https://unix.stackexchange.com/questions/596570