2017-03-01 6 views
0

Ich habe diesen Shell-Skript in einer PHP-Datei:Kombinieren & mit && Shell

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

ich getestet in der Schale ohne die letzten & und es funktioniert gut, aber wenn ich die letzten & laufen wird nicht hinzufügen , zurück 1. Ich brauche einen Weg zu kombinieren & & mit meinem &, ich benutze das &, weil ich diesen Prozess im Hintergrund auf einer separaten Gabel im Vergleich zu meinem Skript ausführen möchte.

+0

Dies sieht aus wie eine Race-Condition warten auf passiert. Ich gehe davon aus, dass die temporäre Datei verhindern soll, dass 'wget' ausgeführt wird, wenn bereits eine andere ausgeführt wird. Sie müssen die Datei jedoch atomar testen und erstellen, oder Folgendes kann passieren: Ein Prozess sieht, dass die Datei nicht existiert, aber angehalten wird, bevor sie die Datei erstellen kann. Ein anderer Prozess * auch * sieht, dass die Datei nicht existiert, aber in der Lage ist, sie zu erstellen. Wenn der erste Prozess fortgesetzt wird, weiß er nicht, dass die Datei erstellt wurde, sondern "erstellt" sie trotzdem. Jetzt laufen beide Prozesse 'wget'. – chepner

Antwort

4

Wahrscheinlich möchten Sie die gesamte Liste im Hintergrund ausführen, nicht nur den Befehl rm.

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