Mam prosty skrypt python, muszę zacząć i zatrzymać i potrzebuję użyć skryptu start.sh i stop.sh, aby to zrobić.Powłoki start/stop dla skryptu Pythona
mam start.sh:
#!/bin/sh
script='/path/to/my/script.py'
echo 'starting $script with nohup'
nohup /usr/bin/python $script &
i stop.sh
#!/bin/sh
PID=$(ps aux | grep "/path/to/my/script.py" | awk '{print $2}')
echo "killing $PID"
kill -15 $PID
Martwię się głównie ze skryptem stop.sh. I think to odpowiedni sposób na znalezienie pid, ale nie postawiłbym na niego zbyt wiele. start.sh pomyślnie go uruchamia. gdy uruchamiam stop.sh, już nie mogę znaleźć proces "ps aux | grep 'myscript.py'"
ale wyjść na konsole:
killing 25052
25058
./stop.sh: 5: kill: No such process
więc wydaje się, że to działa i daje błąd sortuje z „Nie ma takiego procesu”.
Czy to w rzeczywistości błąd? Czy podchodzę do tego w rozsądny sposób? Czy są inne rzeczy, na które powinienem zwrócić uwagę?
EDIT - I rzeczywiście skończyło się coś takiego: 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
Możesz uzyskać PID poprzedniego polecenia za pomocą '$!'. Następnie możesz użyć tego w pliku 'stop.sh'. Nie macie też nic do czynienia z zaczynaniem wiele razy i takimi. – will