事先准备工作:源码安装apache 。安装目录为/usr/local/httpd

任务需求:
1、可通过 service httpd start|stop|status|restart 命令对服务进行控制

2、httpd服务可开机自启动

思路:
1、start、stop操作可直接调用源码安装的httpd的控制程序apachectl
2、在启动服务时,建立httpd.lock文件;停止服务时删除
3、status操作检测httpd.lock文件是否存在,存在判断服务已启动,不存在表示服务停止
4、对每个操作建立对应的函数,进行调用
5、restart操作先调用stop函数,在调用start函数
6、服务脚本的控制参数通过位置变量 $1 传入,使用case分支进行识别、执行相应的操作
7、在脚本开头添加chkconfig管理参数,定义哪个运行级别启动、服务启动优先级、服务关闭优先级(让服务开机自启动,必须添加),description服务描述,进程名

PS:看过系统已有系统服务脚本,发现那些比我写的复杂多了。原谅我刚学shell,第一次写系统服务脚本

脚本如下:

#vim /etc/init.d/httpd
#!bin/bash
#chkconfig:2345 55 25    //运行级别、启动优先级、关闭优先级
#processname:httpd        //进程名
#description:source httpd server daemon  //服务描述
prog=/usr/local/httpd/bin/apachectl      //控制程序路径
lock=/usr/local/httpd/httpd.lock        //lock文件路径
start(){                                //start函数
        $prog start
        echo "正在启动服务...."
        touch $lock
}
stop(){                                //stop函数
        $prog stop
        echo "正在停止服务...."
        rm -rf $lock
}
status(){                        //status函数
        if [ -e $lock ];then
            echo "$0 服务正在运行"
        else
            echo "$0 服务已经停止"
        fi
}
restart(){              //restart函数
        stop
        start          //直接调用stop、start函数,
}
case "$1" in        //case分支结构匹配,$1位置参数对控制参数调用
"start")
        start      //调用start函数
        ;;
"stop")            //调用stop函数
        stop
        ;;
"status")            //调用status函数
        status
        ;;
"restart")            //调用restart函数
        restart
        ;;
*)                //其他参数就输出脚本正确用法
        echo "用法:$0 start|stop|status|restart"
        ;;
esac

验证:
[root@ndbA /]# service httpd start
正在启动服务....
[root@ndbA /]# service httpd status
/etc/init.d/httpd 服务正在运行
[root@ndbA /]# service httpd stop 
正在停止服务....
[root@ndbA /]# service httpd status
/etc/init.d/httpd 服务已经停止
[root@ndbA /]# service httpd stop 
httpd (no pid file) not running
正在停止服务....
[root@ndbA /]# service httpd restatus
用法:/etc/init.d/httpd start|stop|status|restart
[root@ndbA /]# service httpd restart
httpd (no pid file) not running
正在停止服务....
正在启动服务....
[root@ndbA /]#

[root@ndbA /]# chkconfig --list httpd
httpd          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
[root@ndbA /]# chkconfig  httpd off 
[root@ndbA /]# chkconfig --list httpd
httpd          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
[root@ndbA /]# chkconfig  httpd on
[root@ndbA /]# chkconfig --list httpd
httpd          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
[root@ndbA /]#

制作service服务,shell脚本小例子(来自网络)的更多相关文章

  1. linux运维自动化shell脚本小工具

    linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...

  2. shell脚本小案例

    1.获取远程ftp数据到本地目录 #!/bin/bash ftp -n<<! open 135.0.24.19 user exchange exchange binary cd /idep ...

  3. Oracle GoldenGate微服务架构的服务Shell脚本

    Oracle GoldenGate微服务架构的/etc/init.d下的OracleGoldenGate服务Shell脚本: #!/bin/sh # # Oracle GoldenGate Servi ...

  4. shell脚本小集锦

    1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1.txt cat show.sh #!/bin/bash 2) 如何在脚本中使 ...

  5. shell脚本小实例

    本文收集了一堆的shell脚本技巧,我说过,我写博客主要是作一些学习笔记,方便自己查阅,所以,我会搞出这么一篇文章,也没有什么不可理解的.关于这些技巧的出处,诶,我也忘了,可能来自theunixsch ...

  6. shell脚本简单例子

    eg: Expect: 1.用环境变量RANDOM随机生成一个100以内的随机数 2.read读取当前输入 3.当前输入对比随机生成的数 4.当两个数相等时跳出苏循环,并计数(比较n次结果才相等) # ...

  7. java调用shell脚本小demo

    复制指定文件cpp.sh: [root@localhost soft]# vim cpp.sh#!/bin/bash name="$1"\cp /home/soft/test/${ ...

  8. SHELL 脚本小技巧

    脚本很简单,直接上功能介绍及脚本,可以做模板使用: 记录日志,记录脚本开始执行时间.结束时间 usage 函数,脚本需接参数执行,避免误执行,告诉用户,这个脚本的使用方法 加锁,创建锁文件,脚本不允许 ...

  9. hbase离线定时入库shell脚本-小栗子

    #!/bin/bash #######数据类型(cdr,ims,pc,.ngn_sip)###### dir=*** ############# #原始文件地址 oripath=/bigdata/da ...

随机推荐

  1. 超人学院Hadoop大数据技术资源分享

    超人学院Hadoop大数据技术资源分享 http://bbs.superwu.cn/forum.php?mod=viewthread&tid=807&fromuid=645 很多其它精 ...

  2. Thrift搭建分布式微服务1

    Thrift搭建分布式微服务 一.Thrift是什么? 关于Thrift的基本介绍,参看张善友的文章Thrift简介. 二.为什么使用微服务? 在公司的高速发展过程中,随着业务的增长,子系统越来越多. ...

  3. hdu1281+hdu2819(最大匹配数)

    分析:将行和列缩点,即行对应二分图的X部,列对应二分图的Y部,然后交点为连接该行和该列的一条边.匹配时每点都会把整行整列占了,因此就不会出现冲突了. 传送门:hdu1281 棋盘游戏 #include ...

  4. 北京联通100M光纤宽带需邀请函 实际速率12MB/S - OFweek光通讯网

    [新提醒]随身wifi无法使用FAQ(不断更新中~~~~~~) - 使用问题 - 360官方论坛 undefined 北京联通100M光纤宽带需邀请函 实际速率12MB/S - OFweek光通讯网 ...

  5. Android中的动画具体解释系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...

  6. 每日一小练——高速Fibonacci数算法

    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

  7. Windows下visual studio code搭建golang开发环境

    Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...

  8. cocos2dx使用tolua关于字符串处理的一个问题

    正在使用cocos2dx的tolua binding在此过程中发现的一个问题.假设一回或输入是std::string当我们不同意包括二进制数据,和std::string我同意,这样一来就导致了不正确的 ...

  9. windows server 搭建radius服务器

    使用ISA 2004搭建PPTP/L2TP 服务器后,VPN账号是在radius服务器上的,使用window server 2003搭建radius服务器,需要添加组件->internet验证服 ...

  10. SE 2014年4月8日

    1.路由引入的作用? 当网络中运行多种路由协议的时候,由于不同协议的路由算法和度量值等均不相同,路由引入可以将不同协议的路由引入到当前的路由协议中,保证网络的互通. 对比单向入和双向入 单向引入是只将 ...