另一个称为脚本即使给出 & 也不会进入后台

另一个称为脚本即使给出 & 也不会进入后台

我有2个脚本。

我在内部调用我的script2as ,它使用,和命令 的组合一次压缩文件 16 个文件。它基本上是一个集成的文件观察器脚本,用于在检查文件是否存在后运行以下过程。 (不是克朗)sh scriptpath/script2.sh &script1findxargsgzip

参考: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 作为sh script2 needed parameters &(&符号将 script2 推入后台)并script1完成,但在 script 2 找到一个 touch 文件之后。它开始执行。但发现touch文件后,前台会出现正在执行script2的提示。gzip

Script2 在调用脚本 2 之前创建的 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写入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监视目录中出现的文件并压缩它们之类的方法。

相关内容