python - python脚本的shell启动/停止

标签 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 &

和停止.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

所以它似乎有效并且给出了“没有这样的过程”的各种错误。

这真的是一个错误吗?我是否以理智的方式处理这个问题?还有其他我应该注意的事情吗?

编辑 - 我实际上结束了这样的事情: 开始.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

停止.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

最佳答案

这是因为 ps aux |grep SOMETHING 也找到了 grep SOMETHING 进程,因为 SOMETHING 匹配。执行完grep就结束了,所以找不到了。

添加一行:ps aux | grep -v grep | grep YOURSCRIPT

其中 -v 表示排除。 man grep 中有更多内容。

关于python - python脚本的shell启动/停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686351/

相关文章:

linux - 查找 PLT stub 的地址

bash - Grep 命令被特殊字符反转?

linux - Shellscript If 语句返回错误

linux - 在深度 2 编辑所有文件

python - 文本数据的多标签核外学习 : ValueError on partial fit

linux - 在 virtual_env 中使用 pyinstaller 时出现 win32com 错误

linux - 将文件的完整路径添加到文本文件的每一行

python - 如何使 pyinotify 在对文件进行任何修改时运行程序?

python - 如何在 Python 中将列表切片为连续的非零整数组

python - 函数调用运算符优先级