Ich habe einen Shell-Skript mit Methoden:prüfen, ob ein Prozess läuft, und Ausgang, wenn es bereits
start(){
echo "Hello world"
}
stop(){
ps -ef|grep script.sh|grep -v grep|xargs kill
}
while [ "$1" != "" ]; do
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
esac
shift
done
ich dieses Skript bin mit diesem Befehl: ./script.sh start
den Start method.Now zu nennen, ich möchte überprüfen, ob dieser Prozess bereits ausgeführt wird und beenden, wenn er bereits ausgeführt wird. Ich habe einige Lösungen online versucht, aber nichts hat funktioniert. Jemand bitte helfen. Die Lösungen, die ich versucht haben, waren:
if [ -f /var/tmp/script.lock ]; then
echo "Already running. Exiting."
exit 1
else
touch /var/tmp/script.lock
fi
<main script code>
#some code
rm /var/tmp/script.lock
Das andere ist:
PID=$(ps -ef | grep script.sh|grep -v grep)
if [ -z $PID ]; then
echo "Process already running"
exit
fi
Diese Lösungen funktioniert nicht und beenden, auch wenn der Prozess gerade gestartet wird.
Und diese Lösungen waren was? Übrigens findest du bereits alle laufenden Instanzen deines Skripts bei 'stop', kannst du nicht gleich bei' start' etwas machen? – bipll
@bipll Ich habe die Lösungen hinzugefügt, die ich ausprobiert habe. Bitte überprüfen Sie und lassen Sie mich wissen, die Lösung – user6348718
'-z $ PID' wird wahr, wenn der Prozess * nicht * bereits läuft. – Barmar