首页 > 代码库 > 开发调试linux服务时几个好用的进程和端口查询命令组合和简单脚本(ps netstat awk grep)
开发调试linux服务时几个好用的进程和端口查询命令组合和简单脚本(ps netstat awk grep)
这几天在搭建flume服务并在其框架下开发,反复调试输入命令让人不厌其烦,因此在这里记录一下自己找到的一些小技巧:
首先,把自己的应用程序做成一个service是一个很好的选择,一个service就需要支持start 和 stop,start能启动程序,stop能找到start所启动的程序的进程并且关掉它。
可以直接根据/etc/init.d/下的服务脚本来改,但我遇到了问题:因为那些系统服务脚本都是基于start-stop-daemon命令,这个命令很强大,可以启动一个可执行文件并且把进程PID,写入指定的文件里,这样在停止进程时可以直接读取文件来关掉进程。
但我用这个命令来启动自己的程序时,程序启动成功,但是PID文件在无任何错误信息的情况下就是没法生成,测试了root权限执行,也测试了各种写入路径(不需要高权限的),统统不行,于是决定慢慢研究这个问题的同时,先用简单的方法去解决我的需求。
启动程序很简单,作为服务,需要后台运行,假设你的可执行文件名叫做PROGRAM。
所以启动就需要 :
nohup PROGRAM [args] &
要关闭就需要 :
#PROGRAM是进程名
PID = `pidof PROGRAM` if [ ! -z "$PID" ]; then kill -15 $PID fi
但是对于java或者python 程序,进程是java或者python,没有可区分度,所以不能用"pidof"命令,那么只能用"ps -ef"命令,用grep对进程信息进行过滤,来找到合适的进程
而一台机器上可以有多个flume服务,每个服务可能就执行参数有一些区别,所以要用多个grep:
PID=`ps -ef | grep java | grep flume | awk '{ print $2 }'` if [ ! -z "$PID" ]; then kill -15 $PID fi
这里用到了awk命令,取出了"ps"命令打印信息的第二列PID的值。
这样一个简单服务的start和stop就完成了。
我还遇到另一个需求,就是检查某端口的占用情况,并且强制关闭占用这个端口的进程:
# netstat -tlnpa | grep 44444 tcp6 0 0 10.58.242.18:44444 :::* LISTEN 25049/java
端口查询结果有如上格式,那么我们可以根据这个格式编写如下脚本:
pinfo=`netstat -tlnpa | grep 44444` PID=`awk '{split("'$pinfo'", array, "/");print array[2]}' ` if [ ! -z "$PID" ]; then kill -15 $PID fi
就搞定了。
深入挖掘awk 和 grep 还可以有很多用处,作为shell文本处理的利器,我这里只是日常简单的应用,希望对大家有帮助。
开发调试linux服务时几个好用的进程和端口查询命令组合和简单脚本(ps netstat awk grep)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。