我有2个脚本。
我在内部调用我的script2
as ,它使用,和命令 的组合一次压缩文件 16 个文件。它基本上是一个集成的文件观察器脚本,用于在检查文件是否存在后运行以下过程。 (不是克朗)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 作为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
监视目录中出现的文件并压缩它们之类的方法。