2017-03-01 68 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) &