首页 > 代码库 > 把ps -ef & kill指令写成可以自动执行的shell脚本

把ps -ef & kill指令写成可以自动执行的shell脚本

之前重启服务器上的服务,均是先使用ps -ef | grep xxx指令查询出PID,然后再使用kill -9 PID指令杀死进程。由于重启的服务只止一个,每次都要重复输入,甚是麻烦。

示例

今天研究了一下,把以上手动查杀、重启服务的过程写成了shell脚本,重启服务只需执行脚本就可以了。附脚本样例:

 1 #!/bin/sh
 2 
 3 # restart das-web
 4 ps -ef | grep /home/***/das-web/ | awk ‘{print $2}‘ | xargs -n 1 kill -9
 5 
 6 # restart apache1
 7 ps -ef | grep /usr/local/apache-tomcat-6.0.37/ | awk ‘{print $2}‘ | xargs -n 1 kill -9
 8 
 9 # restart apache2
10 ps -ef | grep /usr/local/apache-tomcat-6.0.37-2/ | awk ‘{print $2}‘ | xargs -n 1 kill -9
11 
12 # restart jetty
13 ps -ef | grep com.***.open.JettyServer | awk ‘{print $2}‘ | xargs -n 1 kill -9
14 
15 ps -ef | grep java | awk ‘{print $2}‘ | xargs -n 1 kill -9
16 
17 cd /home/***/das-web/bin/
18 /home/***/das-web/bin/startup.sh
19 
20 cd /usr/local/apache-tomcat-6.0.37/bin/
21 /usr/local/apache-tomcat-6.0.37/bin/startup.sh
22 
23 cd /usr/local/apache-tomcat-6.0.37-2/bin/
24 /usr/local/apache-tomcat-6.0.37-2/bin/startup.sh
25 
26 cd /home/***/CaijingOpen/bin/
27 /home/***/CaijingOpen/bin/run.sh

 

说明

在shell脚本中调用另一个脚本的三种不同方法:

  1. /dir/script.sh
    fork是最普通的就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本。运行的时候开一个sub-shell执行调用的脚本sub-shell执行的时候, parent-shell还在。sub-shell执行完毕后返回parent-shell. sub-shellparent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell。
    作者用的却是这种。

  2. exec /dir/script.sh
    execfork不同,不需要新开一个sub-shell来执行被调用的脚本.  被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后父脚本中exec行之后的内容就不会再执行了。这是execsource的区别

  3. source /dir/script.sh
    fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行所以被调用的脚本中声明的变量和环境变量都可以在主脚本中得到和使用

xargs -n 1 表示每次传入一个参数,这里是PID。

awk表示执行后面的指令,在这里是获取PID列表。