有时候在单机服务器部署中,会启动好几个软件(排除用docker),比如nginx,redis,tomcat,mysql 。。。。

  以前

     在不知道服务装在哪里的情况下,可以用whereis命令查看文件的位置。

     $ whereis nginx 

     nginx: /usr/local/nginx

    然后 

    cd /usr/local/nginx  

    ls

    ./nginx 

    这样nginx服务就启动了,其他服务也是一样。

    问题是。。。。。这样真的很累,如果有上百个服务呢?要炸了!

现在

   思路: 可以先把这些服务关掉,然后再重新打开。如何关掉服务呢?相信如果你接触过Linux,肯定会说kill -9 <pid>,

但是请问你怎么知道pid呢?

ps -ef|grep <服务名字>

如ps -ef|prep nginx 这样就知道的nginx进程的pid。

这样的确是可以关闭一个服务,还是回到文中,有多个服务,总不能每个都这样操作吧,这样就会很麻烦的。

可以使用shell命令处理

我使用的是pkill -f <服务名>,然后依次重启这些服务就好了。

下面贴出整个文件service-start.sh

#!/bin/sh

echo "服务开始关闭"

pkill -f nginx  #关闭nginx服务

pkill -f redis   #关闭redis服务

pkill -f tomcat #关闭tomcat服务,如果开启了多个tomcat全部都会关闭

pkil -f mysql  #关闭mysql服务

#.........

sleep 3  #睡3秒

#在后台开启服务

nohup /usr/local/nginx/sbin/nginx &  

nohup /usr/local/redis/redis-server &

nohup /home/tomcat1/startup.sh &

nohup /home/tomcat2/startup.sh &

#.....

echo "服务全部开启"

这样就可以大功告成了。pkill,nohup这些命令就不仔细讲解了,不懂请自行google或百度吧!

再补充一下,如果机房断电使服务器重启,也可以写一个命令,使其自动完成上面命令的执行。

  • 把Shell脚本放入/etc/rc.d/init.d/目录下
mv ./service-start.sh /etc/rc.d/init.d/service-start.sh
  • 添加脚本的可执行权限
chmod +x /etc/rc.d/init.d/service-start.sh
  • 使用chkconfig命令把脚本添加进开机启动项目中
chkconfig -- add service-start.sh

chkconfig service-start.sh on

完美,开机以后所有服务都已经启动了!

注:如果出现了 service service-start.sh does not support chkconfig

请在shell脚本前面加上 

# chkconfig: 2345 10 90 

其中2345是默认启动级别,级别有0-6共7个级别。

  等级0表示:表示关机   

  等级1表示:单用户模式   

  等级2表示:无网络连接的多用户命令行模式   

  等级3表示:有网络连接的多用户命令行模式   

  等级4表示:不可用   

  等级5表示:带图形界面的多用户模式   

  等级6表示:重新启动

10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐