多个脚本使休息呼叫干扰

时间:2015-08-18 15:12:47

标签: linux bash shell rest unix

所以我遇到了使用curl进行休息调用的unix脚本的问题。我有一个脚本,在其中运行另外两个脚本。

cat example.sh
FILE="file1.txt"
RECIP="wilfred@blamagam.com"
rm -f $FILE
./script1.sh > $FILE
mail -s "subject" $RECIP < $FILE

RECIP="bob@blamagam.com"
rm -f $FILE
./script2.sh > $FILE
mail -s "subject" $RECIP < $FILE
exit 0

每个脚本都会对同一服务进行休息调用。我的理解是script1.sh应该在script2.sh运行之前完全完成,但事实并非如此。在其余服务的日志中,我看到第二个脚本中的第二个脚本仍在执行的第二个脚本中的休息调用。然后第二个脚本因此而失败(它没有返回任何数据)。

我正在修改这个过程,所以我不是最初写它的人。我没有看到任何分叉的进程或后台进程,我一直在撞墙。

我知道script2.sh有效。每当script1.sh花费不到一分钟时,script2.sh工作正常,但更多时候,script1.sh会占用一分钟,导致第二个脚本失败。

这是由cron运行的,文件的内容是邮寄的,所以我不能默认手动运行它们。任何有关要研究什么的建议都将非常感谢!

编辑:这是一个高伪代码示例

script1.sh

ITEMS=`/usr/bin/curl -m 10 -k -u userName:passWord -L https://server/rest-service/rest?where=clause=value;clause2=value2&sel=field 2>/dev/null | sed s/<\/\?Attribute[^>]*>/\n/g | grep -v '^<' | grep -v '^$' | sed 's/ //g'`
echo "\n Subject for these metrics"
echo "$ITEMS"

这两个脚本都有很多像这样的条目。循环有2或3个,但它们很简单,我没有看到任何后台进程被调用。它是一个大脚本,所以我只能提供一个片段。其余的调用管道会导致问题吗?

1 个答案:

答案 0 :(得分:1)

修改的: 刚刚在我的系统上测试了它,它似乎工作。

cat example.sh
FILE="file1.txt"
RECIP="wilfred@blamagam.com"
rm -f "$FILE"
(./script1.sh > "$FILE") &
procscript1=$!
wait "$procscript1"
mail -s "subject" "$RECIP" < "$FILE"

RECIP="bob@blamagam.com"
rm -f "$FILE"
(./script2.sh > "$FILE") &
procscript2=$!
wait "$procscript2"
mail -s "subject" "$RECIP" < "$FILE"
exit 0
  • 使用&
  • 将脚本执行放在后台
  • 获取每个脚本执行的进程ID。
  • 使用wait命令阻止,直到执行完毕。