我的bash脚本有问题:
cmd1='/usr/bin/wget http://mysite/folder/'
$cmd1 > "/var/www/html/log/data.log" 2>&1 &
cmd2='/usr/bin/indexer --rotate --all'
$cmd2 > "/var/www/html/log/$(date +%Y-%m-%d_%H:%M)" 2>&1 &
通过wget获取数据需要花费很多时间,但是在wget完成作业之前执行下一条命令。
如何检查wget是否已完成并执行下一个命令。 谢谢!
P.S:我试图在这些命令之间使用睡眠,第二个命令执行多次。我只需要一次。
答案 0 :(得分:2)
摆脱尾随的&
。 &
使命令在后台运行。它们在前台运行的默认行为是您想要的。
cmd1='/usr/bin/wget http://mysite/folder/'
$cmd1 > "/var/www/html/log/data.log" 2>&1
cmd2='/usr/bin/indexer --rotate --all'
$cmd2 > "/var/www/html/log/$(date +%Y-%m-%d_%H:%M)" 2>&1
注意,您实际上不应该将命令存储在变量中。使用功能。也没有理由写出/usr/bin
。
cmd1() { wget http://mysite/folder/; }
cmd1 > /var/www/html/log/data.log 2>&1
cmd2() { indexer --rotate --all; }
cmd2 > /var/www/html/log/"$(date +%Y-%m-%d_%H:%M)" 2>&1
您现在可以在函数中存储整个命令,重定向和所有内容;您可能已经注意到使用变量时无法做到这一点。
cmd1() { wget http://mysite/folder/ > /var/www/html/log/data.log 2>&1; }
cmd2() { indexer --rotate --all > /var/www/html/log/"$(date +%Y-%m-%d_%H:%M)" 2>&1; }
cmd1
cmd2