多个python服务的启停方法
第一次接触开发一个网站的项目,自己负责的后端的一个功能的实现,包含几个基础服务。主要语言使用的是python,其中涉及到python服务的启停,学习团队内各位大佬的代码,首次使用启停脚本,记录一下。
(服务包含三个python程序:after_repl_jiekou.py,before_jiekou.py,redis_queue_web.py)
最开始的时候,启停代码如下(不建议):
start.sh
#!/bin/bash #source /root/.bashrc source activate py27 nohup python ./after_repl_jiekou.py & echo $! > sign_after_pid & nohup python ./before_jiekou.py & echo $! > sign_before_pid & nohup python ./redis_queue_web.py & echo $! > sign_redis_web_pid &
stop.sh
#!/bin/bash cat sign_after_pid|xargs kill -9 cat sign_before_pid|xargs kill -9 cat sign_redis_web_pid|xargs kill -9
上述启动代码没有问题,但是停止代码总是报错,找不到pid号,所以进程就杀不死
于是后来启停代码改为下面的:
start.sh
#!/bin/bash #source /root/.bashrc source activate py27 nohup python ./after_repl_jiekou.py > log_after 2>&1 & echo $! > sign_after_pid & nohup python ./before_jiekou.py > log_before 2>&1 & echo $! > sign_before_pid & nohup python ./redis_queue_web.py > log_redis_queue 2>&1 & echo $! > sign_redis_web_pid &
stop.sh
#!/bin/sh processName="after_repl_jiekou.py" process_id=`ps -ef | grep $processName | grep -v "grep" | awk '{print $2}'` for id in $process_id do kill -9 $id echo "killed $id $processName" done processName="before_jiekou.py" process_id=`ps -ef | grep $processName | grep -v "grep" | awk '{print $2}'` for id in $process_id do kill -9 $id echo "killed $id $processName" done processName="redis_queue_web.py" process_id=`ps -ef | grep $processName | grep -v "grep" | awk '{print $2}'` for id in $process_id do kill -9 $id echo "killed $id $processName" done
其中pid号通过下面命令得到:
`ps -ef | grep $processName | grep -v "grep" | awk '{print $2}'`
ps命令将某个进程显示出来
grep命令是查找
中间的|是管道命令 是指ps命令与grep同时执行
例如:检查java 进程是否存在:ps -ef |grep java
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
启动停止可以执行下面语句实现启停服务:
sh start.sh
sh stop.sh
辅助参考资料:
https://blog.csdn.net/liang19890820/article/details/74011983 启停服务相关
https://www.cnblogs.com/freinds/p/8074651.html ps与grep使用详解
https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html awk介绍
希望对你有帮助哦~