我有一個簡單的python腳本,我需要啓動和停止,我需要使用start.sh和stop.sh腳本來完成它。python腳本的shell啓動/停止
我有start.sh:
#!/bin/sh
script='/path/to/my/script.py'
echo 'starting $script with nohup'
nohup /usr/bin/python $script &
和stop.sh
#!/bin/sh
PID=$(ps aux | grep "/path/to/my/script.py" | awk '{print $2}')
echo "killing $PID"
kill -15 $PID
我主要關心的是stop.sh腳本。我認爲這是一個適當的方式來找到PID,但我不會對它下注很多。 start.sh成功啓動它。當我運行stop.sh,我可以不再"ps aux | grep 'myscript.py'"
但控制檯輸出發現過程:
killing 25052
25058
./stop.sh: 5: kill: No such process
所以它看起來像它的工作原理並給出了各種各樣的錯誤與「沒有這樣的過程」。
這實際上是一個錯誤?我是否以一種理智的方式接近這一點?還有其他的事情我應該關注嗎?
編輯 - 其實,我結束了這樣的事情: 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
你可以用'$!'獲得前一個命令的PID。然後你可以在'stop.sh'文件中使用它。你也沒有什麼可以處理多次開始等等。 – will