私は開始と停止が必要な単純なpythonスクリプトを持っています。私はstart.shとstop.shスクリプトを使用してそれを行う必要があります。pythonスクリプトのシェルの開始/停止
#!/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スクリプトで主に心配:
私はstart.shを持っています。私はと思うそれはpidを見つけるための適切な方法ですが、私はそれに多くを賭けませんでした。 start.shが正常に起動します。私はstop.shを実行したとき、私はもはや"ps aux | grep 'myscript.py'"
が、コンソール出力によってプロセスを見つけることができません:それは作品と「いいえ、そのようなプロセス」とのある種の誤差を与えるよう
killing 25052
25058
./stop.sh: 5: kill: No such process
はそうそれはそう。
これは実際にはエラーですか?私はまともな方法でこれに近づいていますか?私が注意を払うべき他のものはありますか? -
EDITは、私が実際にこのようなものになってしまった: 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