首先注意一下,我用的环境是centos6.5,中间有一些操作和在Ubuntu上有一些地方的操作是不同的,

编写脚本

首先看一个实例:假设有一个test的服务,可以通过命令对test进行启动、关闭或者重启,下面这个脚本就模拟这个功能:

  1. #!/bin/bash
  2. #test.sh
  3.  
  4. case $1 in
  5. start)
  6. echo "starting service......"
  7. sleep 1
  8. echo "started the service!!"
  9. ;;
  10. stop)
  11. echo "stopping service......"
  12. sleep 1
  13. echo "stopped the service!!"
  14. ;;
  15. restart)
  16. echo "restarting service......"
  17. sleep 1
  18. echo "restarted the service!!"
  19. ;;
  20. *)
  21. echo "warning: invalid option -> ${1}"
  22. ;;
  23. esac

  运行这个脚本,结果如下

  1. [root@localhost ~]# ./test.sh start
  2. starting service......
  3. started the service!!
  4. [root@localhost ~]# ./test.sh stop
  5. stopping service......
  6. stopped the service!!
  7. [root@localhost ~]# ./test.sh retart
  8. warning: invalid option -> retart
  9. [root@localhost ~]# ./test.sh restart
  10. restarting service......
  11. restarted the service!!
  12. [root@localhost ~]#

  

将脚本设置为自启动:

  这一步需要将运行脚本的命令写在一个文件中,这个文件有点特殊:是系统启动完系统的进程后,然后会执行这个脚本,用来启动脚本中指定的服务。这个脚本的路径是在CentOS和RHEL的/etc/rc.d/rc.local,打开这个文件,即可看到文件头部的提示信息:

  1. #!/bin/sh
  2. #
  3. # This script will be executed *after* all the other init scripts.
  4. # You can put your own initialization stuff in here if you don't
  5. # want to do the full Sys V style init stuff.

  默认这个文件是空的,但是现在我们想要将自己的test服务设置为自启动,那么就可以将命令写在这个脚本中,要注意的是,脚本的路径要写完整路径(绝对路径),我在其中添加的内容是:

  1. /home/root/test.sh start

  可以看到,这个只是将启动的命令写在这里,如果有需要,可以将一些服务的其他命令也写在这里,比如关闭apache,mysql。。。。这些都是可以的,这个脚本并不是说只能写开启服务命令,这个脚本只是会在 执行完其他所有的初始化脚本时,才会执行这个脚本。

  然后使用init 6来重启一下Linux系统,如果你是安转的纯字符界面的Linux,那么你就可以观察到,启动时,会在最后的时候出现test.sh start一行,并且会暂停一秒,因为test.sh中用sleep 1这条命令。如果嫌弃后面加一个.sh的后缀难看,可以将文件名的.sh后缀去掉,rc.local中直接写/home/root/test start即可。

使用service启动服务

  咱们通常使用的apache,msyql的启动使用如下命令:

  1. service httpd start
  2. service mysql start

  那么也可以使用service命令来启动咱们自己的服务,但是前提是要将启动脚本移动到/etc/rc.d/init.d/这个目录下,如果不移动的话,service去/etc/rc.d/init.d/目录下查找不到test脚本,就会出错,为了方便和好看,这里将test.sh重命名为test,去掉后缀,好看一点吧:

  1. [root@localhost ~]# service test.sh start #为移动之前,尝试使用service启动,会失败
  2. test.sh: unrecognized service
  3. [root@localhost ~]# cp test.sh /etc/rc.d/init.d/test
  4. [root@localhost ~]# service test start
  5. starting service......
  6. started the service!!
  7. [root@localhost ~]# service test stop
  8. stopping service......
  9. stopped the service!!

  到这里,已经完成了使用service控制服务了,但是还有一个问题:不能使用chkconfig来设置开机启动。

使用chkconfig设置开机启动:

  现在test服务是不能通过chkconfig来设置开机启动,要想知道原因很简单,只需要查看一个可以通过chkconfig来设置开机启动的脚本就行了,比如apache服务,他的启动脚本是/etc/rc.d/init.d/httpd。

查看一下:

  1. #!/bin/sh
  2. # Startup script for the Apache Web Server
  3. # chkconfig: 345 85 15

  上面的脚本中,虽然都是注释,但是,第3行才是他们可以使用chkconfig来设置开机启动的关键点,有了这一行,才能实现目的。首先看一下第3行chkconfig后面的三个数字代表什么意思。

  chkconfig: A B C

    其中A表示的是在哪一级启动,apache的httpd脚本中是在3,4,5级中启动,即让rc3.d、rc4.d,rc5.d生效。

    B表示启动的顺序:在系统启动的时候,有那么多的服务要启动,这个数字则表示他的启动顺序,数字越大越晚启动,建议不重要的服务都放在后期启动

    C表示关闭的顺序:在系统关闭的时候,有那么多的服务要关闭,这个数字则表示他的关闭顺序,数字越小越先关闭,建议不重的服务先关闭

  B和C的开启顺序可以在rc1.d-rc5.d这几个文件中查看,就可以看到他的启动顺序,以S开头,表示start,后面一个数字表示启动顺序,然后是他的服务脚本名称。

  而关闭的顺序可以再rc6.d中查看到的他的关闭书序,就可以看到他的关闭顺序,以K开头,表示kill,后面一个数字表示关闭顺序,然后是他的服务脚本名称。

  1. [root@localhost ~]# ls /etc/rc3.d | grep httpd
  2. S85httpd
  3. [root@localhost ~]# ls /etc/rc6.d | grep httpd
  4. K15httpd

  

  好了,扯远了,所以我们在test脚本中也添加chkconfig这一行

  1. #!/bin/bash
  2. #test.sh
  3.  
  4. # chkconfig: 345 90 10
  5.  
  6. case $1 in
  7. start)
  8. echo "starting service......"
  9. sleep 1
  10. echo "started the service!!"
  11. ;;
  12. stop)
  13. echo "stopping service......"
  14. sleep 1
  15. echo "stopped the service!!"
  16. ;;
  17. restart)
  18. echo "restarting service......"
  19. sleep 1
  20. echo "restarted the service!!"
  21. ;;
  22. *)
  23. echo "warning: invalid option -> ${1}"
  24. ;;
  25. esac

  然后运行:

  1. [root@localhost rc3.d]# chkconfig --add test
  2. [root@localhost rc3.d]# chkconfig test on
  3. [root@localhost rc3.d]# chkconfig --list test
  4. test 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  5. [root@localhost rc3.d]# chkconfig test off
  6. [root@localhost rc3.d]# chkconfig --list test
  7. test 0:off 1:off 2:off 3:off 4:off 5:off 6:off

  这样就可以看到结果了,完美!

因为已经可以通过chkconfig来设置开机启动,那么就不用在/etc/rc.local添加命令来启动test服务了,于是可以将前面示例中的/home/root/test.sh start那一行命令删掉

  

shell脚本--制作自己的服务脚本的更多相关文章

  1. shell之最常用的服务脚本

    任务需求:以最简单的方式管理 /usr/local/php7/sbin/php-fpm -c /usr/local/php7/etc/php.ini 这条命令 包括启动停止重启 使用技术:shell脚 ...

  2. centOS 6 服务管理与服务脚本

    服务管理与服务脚本   linux服务 服务管理与服务脚本 linux服务 服务启动过程详解 chkconfig命令 非独立服务与xinetd进程 一个特殊的服务脚本   服务启动过程详解 在开机启动 ...

  3. shell编程之服务脚本编写,文件锁以及信号捕获

    shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处.基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以 ...

  4. linux可运行的shell脚本与设置开机服务启动(自己总结)

    完整的ln命令参考:http://www.runoob.com/linux/linux-comm-ln.html ln :创建连接文件 - 默认创建的是硬连接,好比复制 ,但是两个文件会同步 命令:l ...

  5. Genymotion模拟器的安装及脚本制作

    在上一篇博文中,讲到这一篇会介绍Genymotion的安装方式.大家都知道,Genymotion是一个模拟器,获取会质疑了,直接连接真机就好了,为何还要配置模拟器?我也是用真机实践后,才选择安装的模拟 ...

  6. Shell实现多级菜单系统安装维护脚本实例分享

    Shell实现多级菜单系统安装维护脚本实例分享 这篇文章主要介绍了Shell实现多级菜单系统安装维护脚本实例分享,本文脚本用多级菜单实现管理WEB服务器.Mysql服务器.Nginx服器等,需要的朋友 ...

  7. Jmeter介绍以及脚本制作与调试

    目录 Jmeter介绍 Jmeter安装 Jmeter主要测试组件 Jmeter元件作用域与执行顺序 Jmeter运行原理 Jmeter脚本制作 Jmeter脚本调试 Jmeter介绍 Jmeter ...

  8. Linux—添加开机启动(服务/脚本)

    系统启动时需要加载的配置文件 /etc/profile./root/.bash_profile/etc/bashrc./root/.bashrc/etc/profile.d/*.sh./etc/pro ...

  9. 【centos7】添加开机启动服务/脚本

    一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...

随机推荐

  1. iframe获取父、子窗口的元素和方法

    原文地址:https://www.cnblogs.com/BlingSun/p/7484237.html jQuery.js调用iframe父窗口与子窗口元素的方法(亲测有效) 子页面获取父页面的id ...

  2. go标准库的学习-crypto/sha256

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha256" sha256包实现了SHA224和SHA256哈希算法 ...

  3. day20 Python 高阶函数,函数,嵌套,闭包 装饰器

    高阶函数定义 1.函数接收的参数是一个函数名 2.函数的返回值是一个函数名 3.满足上述条件任意一个都可以称之为高阶函数 一.函数的接收参数是一个函数名 import time def foo(): ...

  4. Android学习之基础知识十—内容提供器(Content Provider)

    一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...

  5. node-inspector调试工具

    1.  npm或者cnpm 安装node-inspector 命令:  cnpm install -g node-inspector     (说明: 全局安装) 2.  使用node-inspect ...

  6. OpenGL初学:安装配置与第一个程序

    OpenGL初学:安装配置与第一个程序 2014年10月12日 12:37:03 process-z 阅读数:12413 标签: opengl安装教程 更多 个人分类: OpenGL   计算机图形学 ...

  7. ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

    ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...

  8. (转)Xpath语法格式整理

    原文 经常在工作中会使用到XPath的相关知识,但每次总会在一些关键的地方不记得或不太清楚,所以免不了每次总要查一些零碎的知识,感觉即很烦又浪费时间,所以对XPath归纳及总结一下. 在这篇文章中你将 ...

  9. Bitcoin 使用及配置记录

    常用配置 bitcoin-qt.exe -testnet -printtoconsole -conf=D:\Bitcoin\bitcoin.conf -datadir=D:\Bitcoin\Data ...

  10. phpstorm 2018.1.2的安装和破解

    1.什么是phpstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.但是phpstorm是商业软件, ...