나는 시작과 멈춤이 필요한 간단한 파이썬 스크립트를 가지고 있으며, start.sh와 stop.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 스크립트를 주로 걱정 :
나는 start.sh 있습니다. 내가 그 pid를 찾을 수있는 적절한 방법이라고 생각하지만 나는 그것에 많이 내기하지 않을 것입니다. start.sh가 성공적으로 시작합니다. 내가 stop.sh을 실행할 때, 나는 더 이상 "ps aux | grep 'myscript.py'"
하지만 콘솔 출력하여 프로세스를 찾을 수 있습니다 작동 AND "그런 과정"과 종류의 오류를 준다처럼
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