Ich verwende lsof Befehl, um nur eine Instanz von setup.sh und es funktioniert gut, wenn keine Argument Werte sind. Aber ich musste Argumente in setup.sh für z.B.lsof Linux-Befehl zu zählen laufenden Instanzen mit Argument Werte
setup.sh machine1 setup.sh machine2 setup.sh machine3
Also, wenn setup.sh machine1 läuft und wieder denselben Befehl ausgeführt wird, wird es warten, bis setup.sh machine1 abgeschlossen ist. Ich denke, lsof ist für den Prozess und vielleicht nicht möglich, aber jeder andere gute Vorschlag für die Wartelogik?
Wenn ich versuche, einige Argumente übergeben lsof Befehl gibt Syntaxfehler, versuchte ich unten, aber kein Glück. Mein Ziel ist es, nur eine Instanz unter Verwendung von machine1 auszuführen, und wenn jemand versucht, setup.sh mit dem Argument machine1 auszuführen, sollte es warten. Irgendeine andere Dateisperre/Wartelogik?
if ([[ $(lsof -t \setup.sh 'machine1'| wc -l) > 1 ]]); then
if ([[ $(lsof -t '\setup.sh machine1'| wc -l) > 1 ]]); then
if ([[ $(lsof -t "\setup.sh machine1"| wc -l) > 1 ]]); then
Arbeits:
if ([[ $(lsof -t \setup.sh| wc -l) > 1 ]]); then
echo -e "\tWaiting for 2 minutes...\n"
sleep 2m
else
echo -e "\tFree now to run setup.sh\n"
fi
funktioniert nicht (Syntaxfehler):
if ([[ $(lsof -t \setup.sh machine1| wc -l) > 1 ]]); then
echo -e "\tWaiting for 2 minutes...\n"
sleep 2m
else
echo -e "\tFree now to run setup.sh\n"
fi
Warum hatten Sie einen Schrägstrich vor 'setup.sh'? – Inian
Es ist nur ein Pfad, wo das Skript gerade platziert/ausgeführt wird. –