您的位置:首页 > 运维架构 > Shell

用shell脚本重启进程

2014-11-19 09:24 134 查看
最近在调试服务器程序的时候,经常要重启进程,每次都要先查看PID、再kill掉、再启动进程,启动完了还要查看是不是启动成功了。略烦。
于是想要写个shell脚本做以上几件事,一了百了。

功能需求:
1、杀死指定进程
2、启动指定进程
3、检查指定进程是否启动

算法思路:
1、ps工具查找进程
2、grep工具在ps找出的进程中筛选指定进程
3、awk工具在筛选出的进程信息中找出PID
4、kill工具结束PID
5、启动进程
6、第一步+第二步判断进程是否启动
水平有限,目前这是我能想到的唯一方法。
如果你有更好更简便的方法,请给我留言,不胜感激。

动手:
先在命令行模式下测试
1、启动一个小程序,内容如下:

void main(){

while(1){

}

}

没什么,就是个测试程序,保证它能一直存在就可以了。

程序名为 test

后台运行程序

./test &

2、ps -u可查看'我'的进程



第一行报了个Warning,实在不理解什么意思。不过好像没什么影响,暂时放过了。
3、grep + [程序名] 筛选指定进程





grep也在结果中,再筛选一次,用-v过滤掉grep





ok。第二列就是我要找的PID了。
4、awk筛选PID





PID出现了。接下来就是杀掉它了。
5、 kill根据PID杀掉进程
kill是不支持管道的。怎么办?
那就先执行第4步, 再执行kill 第4步返回的PID就是了





注意:包裹ps -u……那段代码的是tab键上面的那个键,不是单引号。



可以看到,test进程已经成功被杀掉。
6、重新启动进程
考虑到将来运行shell脚本的路径不确定,所以用绝对路径启动进程就是了。



7、检查进程是否成功启动
用判断符号 [ -z "$[变量名]"] 来判断变量是否为空



测试到此为止,下面开始写shell脚本:

#!/bin/bash
#Program
# The program is used to restart a process
#Auth:
# Jimmy
#Date:
# 2014-11-18
#检查是否有输入参数
[ -z "$1" ] && echo "you should input the process name !" && exit 0
#检查输入参数是否指向可执行文件
if test ! -e $1 || test ! -x $1;then
echo "please input the absolute path of your process"
exit 0
fi
#杀进程
kill -9 `ps -u | grep $1 | grep -v grep | grep -v sh| awk '{print $2}'`
#重启进程
$1 &
#检查进程是否启动
[ -z "`ps -u | grep $1 | grep -v grep | grep -v sh | awk '{print $2}'`" ] && echo "process $1 is not running" || echo "process $1 is running"





可以看到,/home/jimmy/test 这个程序在运行 myshell之后,PID、启动时间和运行时间都改变了,说明这个程序重启成功。
这只是个简单的shell脚本,就不进行其他测试了。
程序cpu占用问题,就不要在意啦 ,毕竟随手写的测试程序,也是在本地虚拟机里跑的,没考虑那么多了。

小结:
之前虽然看过一些shell,但仍然感觉shell语法相当晦涩,难写难读,也有可能是第一次写,各种不熟悉所致。
这个shell还不够灵活,目前只能使用程序的绝对路径,而且暂时还不支持有输入参数的程序。

如有问题,还请不吝赐教,本人不胜感激。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: