Shell
另一個稱為腳本即使給出 & 也不會進入後台
我有 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
來觀察文件出現的目錄並壓縮它們。