重击直到完成作业并执行下一个命令

时间:2019-03-20 21:53:17

标签: linux bash shell

我的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:我试图在这些命令之间使用睡眠,第二个命令执行多次。我只需要一次。

1 个答案:

答案 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