我已经编写了一个具有多个函数的脚本。有几个函数是bash脚本 - 它调用期望脚本。当我在终端中测试函数时,它运行良好并完成 - 但是当我测试整个脚本时,它会挂起。如果我删除期望脚本,它将完成,但它会累计时间,而不是我期望的完成时间为6m30.400s这是最长时间的函数。从bash脚本中的函数调用期望脚本失败
这是正确的输出,用于后台进程并将stdout发送到位桶 - 这样所有进程将同时运行backup_ironport &> /dev/null
例如,
我运行了前6个函数的脚本,我预计它需要2分48秒,但它花了4分47秒 - 这似乎是分别运行它们,而不是同时运行。
time ./network-bak.sh
real 4m47.033s
如果我让它运行所有功能它挂起超过15分钟,我必须停止它。如果我在shell中单独运行函数来测试它会完成。我运行了bash -x和脚本,它只是坐在第一个期望脚本backup_cisco_firewall
上,并且不在哪里。
如果我检查过程中系统:it sits there forever
ps aux |grep fw-bak-expect
user 30925 0.0 0.0 0 0 pts/7 Z 10:18 0:00 [fw-bak- expect.s] <defunct>
这里的脚本和运行过程中的功能,可谓物美价廉:我在终端与时间的函数测试每个功能 - 并把真正的使用#标记旁边的时间来显示运行需要多长时间。
backup_fortigate()
{ for fortigate in `cat "$h5"`; do scp $fortigate:sys_config "$b3"/$fortigate-$date; done; }
backup_cisco_firewall()
{ cd "$sc" ; for fw in `cat "$h2"`; do ./fw-bak-expect.sh $fw ; done; }
########################
# Start of MAIN #
# First Run the Backups#
########################
rotate &
rpid=$!
backup_ironport &> /dev/null # real 0m27.490s
backup_fortigate &> /dev/null # real 0m40.816s
backup_nexus &> /dev/null # real 0m35.346s
backup_switch-router &> /dev/null # real 2m48.649s
backup_rsa &> /dev/null # real 0m1.017s
backup_tlite &> /dev/null # real 0m29.589s
backup_cisco_firewall &> /dev/null # real 6m30.400s # no sys-context
backup_sw-no-pk &> /dev/null # real 4m6.729s
backup_esx &> /dev/null # real 1m24.330s
wait
##############################
# Now we confirm the backups #
##############################
confirm_backup > /dev/null
search_for_backups > /dev/null
vh1=$(wc -l < "$f1")
vh2=$(wc -l < "$f2")
backup_verify
# zero the verification files for the next run
cat /dev/null > "$f1"
cat /dev/null > "$f2"
cat /dev/null > "$mh"
kill -9 $rpid
echo "\b\b "
似乎一旦我删除>的/ dev/null的做工精细,只是有它的功能与 –