Bra*_*rad 5 python linux shell
我有一个简单的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 &
Run Code Online (Sandbox Code Playgroud)
和stop.sh
#!/bin/sh
PID=$(ps aux | grep "/path/to/my/script.py" | awk '{print $2}')
echo "killing $PID"
kill -15 $PID
Run Code Online (Sandbox Code Playgroud)
我主要关注的是stop.sh脚本.我认为这是寻找pid的合适方式,但我不会对它下注太多.start.sh成功启动它.当我运行stop.sh时,我无法再通过"ps aux | grep 'myscript.py'"
控制台输出找到进程:
killing 25052
25058
./stop.sh: 5: kill: No such process
Run Code Online (Sandbox Code Playgroud)
所以它似乎工作并给出了"没有这样的过程"的错误.
这实际上是一个错误吗?我是否以理智的方式接近这个?还有其他我应该注意的事情吗?
编辑 - 我实际上最终得到了这样的东西: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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这是因为ps aux |grep SOMETHING
也找到了grep SOMETHING
进程,因为 SOMETHING 匹配。grep执行完毕后,就找不到了。
添加一行:ps aux | grep -v grep | grep YOURSCRIPT
其中 -v 表示排除。更多内容在man grep
.
归档时间: |
|
查看次数: |
8038 次 |
最近记录: |