スクリプトが2つあります。
script2
、およびコマンドの組み合わせを使用して、一度に16個のファイルを圧縮する内部でmyを呼び出します。デフォルトでは、ファイルが存在することを確認した後、次のプロセスを実行する統合ファイルウォッチャースクリプトです。 (クローナではない)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のシェルが開いています。フォアグラウンドではなくバックグラウンドで実行するには、2番目のスクリプトのgzipコマンドが必要です。
Script1 - 複数のファイルを生成します。 script2で使用する変数のエクスポート
その後、script2が呼び出されsh script2 needed parameters &
(アンパサンドがscript2を背景にプッシュします)、script1
完了しますが、スクリプト2がタッチファイルを見つけた後は完了しません。実行が開始されます。ただし、タッチファイルが見つかると、実行プロンプトがscript2
前面に表示されます。gzip
Script2 を呼び出す前に生成された Script2 Gunzips ファイル
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
答え1
xargs -t
Write.Yoursには何の効果stderr
もありません。したがって、バックグラウンドプロセスで端末に書き込むのは一般的に悪い考えです。> /dev/null
stderr
答え2
find / gzipプロセスがバックグラウンドで発生するようにするには、次のコマンドを使用してバックグラウンドでフルチャンクを実行できます。
( find ${Filepath}/ -maxdepth 1 -type f -name "${Pattern}" -print0 | xargs -0 -t -n 1 -P 16 gzip > /dev/null ) &
ただし、これらのすべてのgzipプロセスを完了するのにかかる時間(賢明ではない可能性があります)によっては、スクリプトの実行間の時間より長くかかる場合は、同じファイルを圧縮しようとする複数のプロセスが発生する可能性があります。
inotifywatch
表示されるファイルのディレクトリを監視および圧縮するなどの方法を使用する方が良いでしょう。