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

我的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完成任务之前执行next命令。
如何检查wget是否已完成并执行下一个命令。
谢谢!
备注:我试过在这些命令之间使用sleep,第二个命令执行了多次。我只需要一次。


最佳答案:

去掉后面的&s。&导致命令在后台运行。它们在前景中运行的默认行为是您想要的。

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

    公众号
    关注公众号订阅更多技术干货!