Ich habe ein einfaches Python-Skript, ich muss starten und stoppen, und ich muss ein start.sh und stop.sh-Skript verwenden, um es zu tun.shell start/stop für Python-Skript
Ich habe start.sh:
#!/bin/sh
script='/path/to/my/script.py'
echo 'starting $script with nohup'
nohup /usr/bin/python $script &
und stop.sh
#!/bin/sh
PID=$(ps aux | grep "/path/to/my/script.py" | awk '{print $2}')
echo "killing $PID"
kill -15 $PID
Ich bin hauptsächlich mit der stop.sh Skript. I denke, das ist ein geeigneter Weg, um die PID zu finden, aber ich würde nicht viel darauf wetten. start.sh startet es erfolgreich. wenn ich stop.sh laufen, ich kann nicht mehr finden, den Prozess durch "ps aux | grep 'myscript.py'"
aber die Konsole Ausgänge:
killing 25052
25058
./stop.sh: 5: kill: No such process
so scheint es, wie es funktioniert und gibt einen Fehler von Sorten mit „keinem solchen Prozess“.
Ist das tatsächlich ein Fehler? Nähme ich mich dem vernünftig? Gibt es noch andere Dinge, auf die ich achten sollte?
EDIT - ich endete eigentlich mit so etwas wie dies oben: start.sh
#!/bin/bash
ENVT=$1
COMPONENTS=$2
TARGETS=("/home/user/project/modules/script1.py" "/home/user/project/modules/script2.py")
for target in "${TARGETS[@]}"
do
PID=$(ps aux | grep -v grep | grep $target | awk '{print $2}')
echo $PID
if [[ -z "$PID" ]]
then
echo "starting $target with nohup for env't: $ENVT"
nohup python $target $ENVT $COMPONENTS &
fi
done
stop.sh
#!/bin/bash
ENVT=$1
TARGETS=("/home/user/project/modules/script1.py" "/home/user/project/modules/script2.py")
for target in "${TARGETS[@]}"
do
pkill -f $target
echo "killing process $target"
done
Sie können die PID des vorherigen Befehls mit '$!' Erhalten. Dann können Sie dies in der 'stop.sh' Datei verwenden. Du hast auch nichts drin um mit dem Start mehrere Male und so umzugehen. – will