用shell脚本重启进程

最近在调试服务器程序的时候,经常要重启进程,每次都要先查看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还不够灵活,目前只能使用程序的绝对路径,而且暂时还不支持有输入参数的程序。
    
    如有问题,还请不吝赐教,本人不胜感激。
    















  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值