当前位置: 首页 > 面试题库 >

用于python脚本的shell启动/停止

谷梁鸣
2023-03-14
问题内容

我有一个简单的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

停止

#!/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 3脚本,它使用内置的模块。该脚本可归结为以下内容: 根据用于请求的URI,通过动态导入模块来处理GET和POST请求。 上面的工作正常,但是,在创建脚本之后,需要能够远程更新脚本的整个“包”(即服务器脚本,加上所有“动态加载”的“模块脚本””并位于子文件夹中)。 为此,我在Python 3中编写了另一个服务器脚本(称为),当被指示时,它将检索一个zip文件,然

  • 本文向大家介绍CentOS下redis自启动shell脚本,包括了CentOS下redis自启动shell脚本的使用技巧和注意事项,需要的朋友参考一下 用这个脚本管理之前,需要先配置下面的内核参数,否则Redis脚本在重启或停止redis时,将会报错,并且不能自动在停止服务前同步数据到磁盘上: 然后应用生效: 然后增加服务并开机自启动: 脚本源码: 注意:请将脚本中redis的启动文件、配置文件和

  • 本文向大家介绍Shell实现的Oracle启动脚本分享,包括了Shell实现的Oracle启动脚本分享的使用技巧和注意事项,需要的朋友参考一下 Usage: sh oracled [start|stop|restart] SIDs 其中SIDs是数据库名,多个名称之间用逗号分隔。缺省的操作是 restart ,也可以指定需要进行的操作( start | stop | restart )

  • 我正在编写一些小型shell脚本实用程序,它自动部署过程。我准备了许多与在linux中关闭jboss服务器的命令相关的链接,这样我就可以从我的实用程序中关闭服务器。 阅读一些链接,这些链接将告诉如何在JBoss7或更高版本中实现这一功能,但在旧的JBoss5.x版本中则没有。其中之一是 问候

  • 我的jmx testplan所在的当前目录是否有属性? ubuntu 12.04上的apache jmeter 2.8

  • 问题内容: 我正在写一个如下的shell脚本: 现在,我想要实现的是列出$ ACTIONS_DIR中的每个文件以执行该文件。$ ACTIONS_DIR下的每个文件都是另一个Shell脚本。 现在,这里的问题在于,使用exec之后,脚本将停止并且不会转到下一个文件。任何想法为什么会这样? 问题答案: 替换shell进程。如果只想将该命令作为子进程调用,则将其删除。