開始および停止する必要がある単純な python スクリプトがあり、それを行うには start.sh および stop.sh スクリプトを使用する必要があります。
私は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