2017-03-01 27 views
0

我有一个PHP文件这个shell脚本:结合及与&&壳

[ ! -e "dsaasdas3efsdgadd345y5erhaha45_temp" ] && touch dsaasdas3efsdgadd345y5erhaha45_temp && wget http://localmyurltofunction?id=100 -O ./images/100 > /dev/null 2>&1 && rm dsaasdas3efsdgadd345y5erhaha45_temp & 

我测试,在没有最后&外壳和它的伟大工程,但是当我添加最后&将无法​​运行,返回1.我需要一种方法来结合& &与我的&,我使用&,因为我希望这个过程在后台运行在与我的脚本相比单独的分支上。

+0

这看起来像是等待发生的竞赛状况。我假设临时文件是为了防止'wget'运行,如果另一个已经运行。但是,您需要以原子方式测试和创建文件,否则可能会发生以下情况:一个进程看到文件不存在,但在创建文件之前被暂停。另一个进程*也*看到文件不存在,但能够创建它。当第一个进程恢复时,它不知道文件已经创建,但是“创建”它。现在这两个进程都运行'wget'。 – chepner

回答

4

您可能想要在后台运行整个列表,而不仅仅是rm命令。

([ ! -e foo ] && touch foo && wget ... && rm foo) &