Linux shell编写系统服务脚本

 1 事先准备工作:源码安装apache 。安装目录为/usr/local/httpd
 2
 3 任务需求:
 4 1、可通过 service httpd start|stop|status|restart 命令对服务进行控制
 5
 6 2、httpd服务可开机自启动
 7
 8 思路:
 9 1、start、stop操作可直接调用源码安装的httpd的控制程序apachectl
10 2、在启动服务时,建立httpd.lock文件;停止服务时删除
11 3、status操作检测httpd.lock文件是否存在,存在判断服务已启动,不存在表示服务停止
12 4、对每个操作建立对应的函数,进行调用
13 5、restart操作先调用stop函数,在调用start函数
14 6、服务脚本的控制参数通过位置变量 $1 传入,使用case分支进行识别、执行相应的操作
15 7、在脚本开头添加chkconfig管理参数,定义哪个运行级别启动、服务启动优先级、服务关闭优先级(让服务开机自启动,必须添加),description服务描述,进程名
16
17 PS:看过系统已有系统服务脚本,发现那些比我写的复杂多了。原谅我刚学shell,第一次写系统服务脚本
18
19 脚本如下:
20
21 #vim /etc/init.d/httpd
22 #!bin/bash
23 #chkconfig:2345 55 25    //运行级别、启动优先级、关闭优先级
24 #processname:httpd        //进程名
25 #description:source httpd server daemon  //服务描述
26 prog=/usr/local/httpd/bin/apachectl      //控制程序路径
27 lock=/usr/local/httpd/httpd.lock        //lock文件路径
28 start(){                                //start函数
29         $prog start
30         echo "正在启动服务...."
31         touch $lock
32 }
33 stop(){                                //stop函数
34         $prog stop
35         echo "正在停止服务...."
36         rm -rf $lock
37 }
38 status(){                        //status函数
39         if [ -e $lock ];then
40             echo "$0 服务正在运行"
41         else
42             echo "$0 服务已经停止"
43         fi
44 }
45 restart(){              //restart函数
46         stop
47         start          //直接调用stop、start函数,
48 }
49 case "$1" in        //case分支结构匹配,$1位置参数对控制参数调用
50 "start")
51         start      //调用start函数
52         ;;
53 "stop")            //调用stop函数
54         stop
55         ;;
56 "status")            //调用status函数
57         status
58         ;;
59 "restart")            //调用restart函数
60         restart
61         ;;
62 *)                //其他参数就输出脚本正确用法
63         echo "用法:$0 start|stop|status|restart"
64         ;;
65 esac
66
67 验证:
68 [[email protected] /]# service httpd start
69 正在启动服务....
70 [[email protected] /]# service httpd status
71 /etc/init.d/httpd 服务正在运行
72 [[email protected] /]# service httpd stop
73 正在停止服务....
74 [[email protected] /]# service httpd status
75 /etc/init.d/httpd 服务已经停止
76 [[email protected] /]# service httpd stop
77 httpd (no pid file) not running
78 正在停止服务....
79 [[email protected] /]# service httpd restatus
80 用法:/etc/init.d/httpd start|stop|status|restart
81 [[email protected] /]# service httpd restart
82 httpd (no pid file) not running
83 正在停止服务....
84 正在启动服务....
85 [[email protected] /]#
86
87 [[email protected] /]# chkconfig --list httpd
88 httpd          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
89 [[email protected] /]# chkconfig  httpd off
90 [[email protected] /]# chkconfig --list httpd
91 httpd          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
92 [[email protected] /]# chkconfig  httpd on
93 [[email protected] /]# chkconfig --list httpd
94 httpd          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
95 [[email protected] /]#
时间: 2024-08-04 01:51:39

Linux shell编写系统服务脚本的相关文章

Linux Shell 运维脚本功底积累

1.删除Linux远程用户连接会话 [[email protected] logs]# w 10:45:28 up 15 days, 16:23, 4 users, load average: 0.00, 0.00, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 - Sun21 4days 0.00s 0.00s -bash root pts/0 192.168.1.2 09:11 0.00s 0.07s 0

Linux Shell之init脚本与activemq init脚本设计亮点分析

上一篇博文<Linux下Apache ActiveMQ5.9的安装配置与测试>中详细叙述了activemq的安装配置和如何利用java小程序测试activemq是否正常工作.此篇文章将继续剖解activemq中的一些精华内容,从activemq的init脚本说起.init(initialization)脚本又叫服务控制脚本,可以利用此脚本启动.停止.重新启动.重新载入配置.查看运行状态等等,通常init脚本的写法遵循System V init script的写法,能够用service命令对服务

Shell脚本编写系统服务脚本

[[email protected] ~]# vim myprog #!/bin/bash case "$1" in start) echo -n "正在启动sleep服务--" if sleep 120 then echo "ok" fi ;; stop) echo -n "正在停止sleep服务--" pkill "sleep" &> /dev/null echo "ok&quo

Linux中编写Bash脚本的10个技巧

Shell 脚本编程 是你在 Linux 下学习或练习编程的最简单的方式.尤其对 系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能. 本文中,我们将分享 10 个写出高效可靠的 bash 脚本的实用技巧,它们包括: 1. 脚本中多写注释 这是不仅可应用于 shell 脚本程序中,也可用在其他所有类型的编程中的一种推荐做法.在脚本中作注释能帮你或别人翻阅你的脚本时了解脚本的不同部分所做的工作. 对于刚入门的人来说,注释用 # 号来定义. # TecM

用shell编写nginx脚本的启动,关闭,重加载

#!/bin/bash                 ----默认执行shell方式 #chkconfig: 2345 10 80        ----加入到开机执行的方式 path="/usr/local/nginx/sbin/nginx"        ----源代码安装nginx之后的启动路径 name="nginxd"    test=0 log=/tmp/nginxd.log                ----nginx的日志 DATE=`date

Linux Shell 网络层监控脚本(监控包括:连接数、句柄数及根据监控反馈结果分析)

脚本监控: 获取最大句柄数的进程: 链接分析: 脚本片段: case "$handle" in 2) echo "The handle of the process : " echo " " handle | awk '{print $3 "\n" $5 "\n" $7 "\n" $9 "\n" $11 "\n"}' > temp for i

使用 Linux Shell 编写筛选无 CDP 邻居的 Cisco 交换机端口

需求如下是思科交换机所有 UP 的物理端口GigabitEthernet3/1GigabitEthernet3/2GigabitEthernet3/4GigabitEthernet3/6GigabitEthernet3/7GigabitEthernet3/8GigabitEthernet3/9GigabitEthernet3/10GigabitEthernet3/11GigabitEthernet3/12GigabitEthernet3/13GigabitEthernet3/14GigabitE

使用shell编写一个脚本,磁盘超过80%邮件报警

方法1: 监控磁盘或CPU超过一定值邮件报警脚本: [[email protected] scripts]# cat check.sh #!/bin/bash LANG=en_US.UTF-8 cpuUsed=`top -n 1|awk -F '[, %]+' 'NR==3 {print100-$11}'` diskUsed=$(df -h|awk -F '[ %]+'  '/\/$/{print $5}') logFile=/tmp/jk.log function Sendmail(){ ma

Linux Shell实战之一 脚本安装Discuz

#!/bin/bash # #Target: Auto install Discuz! #Date: 2015-05-02 #Author: Jacken #QQ:654001593 #Version: 1.0 #You should check apr-devel,apr-util-devel,gcc,ncurses-devel,gcc-c++,libxml2,libxml2-devel...before exec script #You can use yum to install! # #