我正在尝试使用 shell 脚本在 linux 中执行一些任务(在 mysql 上进行基准测试,最多需要 1 或 2 小时),与此同时,我需要并行运行另一个脚本,该脚本将在每个10 或 20 分钟,然后将输出写入文件。现在,一旦任务完成,我想停止第二个脚本并获取输出。但它没有发生。这是我到目前为止所做的:
taskscript - 我执行 1 或 2 小时任务的地方
#!/bin/sh
#Here I'm doing some task which takes upto 1 hr
#For simulating test
sleep 10
echo "Task Finished" > "task.txt";
infintequery - 将并行输出任务的脚本
#!/bin/sh
while true;
do
sleep 10;
#Here I'm querying task result and store it to a an output file with timestamp
#For simulating test, just writing time only
echo $(date +"%m/%d %T") >> "infinite.txt";
done
mainscript - 并行运行两个脚本的主脚本
#!/bin/sh
sh ./taskscript 1>/dev/null 2>&1 &
pid1=$!
sh ./infintequery 1>/dev/null 2>&1 &
pid2=$!
wait $pid1
ret1=$?
wait $pid2
ret2=$?
if [ $ret1 -eq 0 ]
then
echo "Completed succesfully"
kill $pid2
else
echo "Failed to complete script"
fi
我执行后./mainscript
,以下是输出
task.txt 在 10 秒后生成
每 10 秒为无限.txt 附加时间。
脚本永远不会完成,infinite.txt 每 10 秒更新一次。
我希望主脚本在任务脚本完成后停止执行,但主脚本也没有完成,即使在我给 Ctrl-C 之后,infinite.txt 仍在更新。
所以各位,请帮我解决这个问题。我在这里做错了什么?我在 shell 脚本方面没有那么有经验,这些代码都取自 SO 本身的一些帖子。
提前致谢