SHELL脚本testsrv脚本(init脚本或者SysV脚本)
testsrv脚本(SysV脚本)
一、说明:? CentOS7已经使用Systemd来管理服务,推荐使用Systemd来管理服务。ubuntu18.04现在也是Systemd管理服务。 ? init.d是CentOS6时候常用的,不过现在,CentOS6,CentOS7,ubuntu16.04,ubuntu18.04照样可以用。 ? 该脚本一般都放在/etc/rc.d/init.d目录下 ? 该脚本可以接收start,stop,status,reload,restart等参数来管理服务 ? 基本上都会加载/etc/rc.d/init.d/functions,这个文件中有一些比较好用的函数 ? #chkconfig和#describe这两行都要写上,describe这个现在貌似可以不用写了。 ? ? 再说明一下,CentOS7现在不使用init0-6来管理用户模式,也用systemd管理 二、题目编写服务脚本/root/bin/testsrv.sh,完成如下要求 (1) 脚本可接受参数:start,stop,restart,status (2) 如果参数非此四者之一,提示使用格式后报错退出 (3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME,并显示“启动成功” 考虑:如果事先已经启动过一次,该如何处理? (4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME,并显示“停止完成” 考虑:如果事先已然停止过了,该如何处理? (5) 如是restart,则先stop,再start 考虑:如果本来没有start,如何处理? (6) 如是status,则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAME is running...”,如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped...” (7)在所有模式下禁止启动该服务,可用chkconfig 和 service命令管理 说明:SCRIPT_NAME为当前脚本名 三、脚本[[email?protected] init.d]# cat /etc/init.d/testsrv #!/bin/bash # chkconfig: 2345 10 90 # description: testsrv # . /etc/init.d/functions check_running(){ [ -e /var/lock/subsys/`basename $0` ] && STAT=0 || STAT=1 } do_status(){ check_running if [ "$STAT" = "1" ];then action "`basename $0` is stopped..." false else action "`basename $0` is running..." true fi } do_start(){ check_running if [ "$STAT" = "0" ];then action "`basename $0` 正在运行,取消操作..." true exit 0 elif [ "$STAT" = "1" ];then touch /var/lock/subsys/`basename $0` fi check_running if [ "$STAT" = "0" ];then action "`basename $0` 启动成功..." true elif [ "$STAT" = "1" ];then action "`basename $0` 启动失败..." false exit 20 fi } do_stop(){ check_running if [ "$STAT" = "0" ];then rm -f /var/lock/subsys/`basename $0` check_running if [ "$STAT" = "1" ];then action "`basename $0` 停止成功..." true elif [ "$STAT" = "0" ];then action "`basename $0` 停止失败..." false exit 10 fi fi } do_restart(){ check_running if [ "$STAT" = "0" ];then action "`basename $0` 已经运行,正在重新启动..." true do_stop do_start elif [ "$STAT" = "1" ];then action "`basename $0` 没有运行,正在启动..." true do_start fi } case "$1" in start|stop|status|restart) do_$1 ;; *) echo "缺少参数: start|stop|status|restart" ;; esac 四、操作CentOS7操作 [[email?protected] init.d]# mv testsrv.sh testsrv #将testsrv加入SysV服务 [[email?protected] init.d]# chkconfig --add testsrv [[email?protected] init.d]# chkconfig --list testsrv 注:该输出结果只显示 SysV 服务,并不包含 原生 systemd 服务。SysV 配置数据 可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 ‘systemctl list-unit-files‘。 查看在具体 target 启用的服务请执行 ‘systemctl list-dependencies [target]‘。 testsrv 0:关 1:关 2:开 3:开 4:开 5:开 6:关 #上面可以看到testsrv加入到了2345模式下开机启动,和配置文件中写的一样 #将该服务在345模式下关闭 [[email?protected] init.d]# chkconfig --level 345 testsrv off [[email?protected] init.d]# chkconfig --list testsrv 注:该输出结果只显示 SysV 服务,并不包含 原生 systemd 服务。SysV 配置数据 可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 ‘systemctl list-unit-files‘。 查看在具体 target 启用的服务请执行 ‘systemctl list-dependencies [target]‘。 testsrv 0:关 1:关 2:开 3:关 4:关 5:关 6:关 启动关闭玩玩 五、脚本详解? 再说一下,CentOS7推荐systemd来管理服务,不建议用SysV管理 ? chkconfig 2345 10 90表示服务在2345四个模式下开启testsrv功能,10表示开启编号为96,07表示关闭的编号。 ? 这个编号要注意下,不能和其他重复了,init 1是单用户模式,该模式下绝大部分服务都是开机关闭的(K打头),/etc/rc.d/rc1.d/下面自己看看吧,选一个没用的开启编号。init 5是桌面图形化模式,很多服务是启动的,可以看看/etc/rc.d/rc5.d/下面哪些开启编号(S打头)占用了,选择一个关闭的编号 ? 如果不想该服务在任何模式下启动,那么把2345变成- ? 同时再说明一下:CentOS7不采用init0-6来管理启动模式,使用Systemd管理 六、chkconfig用法这个现在也就是CentOS6用了,CentOS7虽然命令还在,但已经不用来管理服务了 查看所有服务的开机启动情况 [[email?protected] init.d]# chkconfig --list 查看atd服务的开启启动情况 #2 3 4 5模式下开机启动 [[email?protected] init.d]# chkconfig --list atd atd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 禁止atd服务2 3 4 5 模式下启动 [[email?protected] init.d]# chkconfig --list atd atd 0:off 1:off 2:off 3:off 4:off 5:off 6:off 新写了个testsrv,加入SysV chkconfig --add testsrv 删除应该是del (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |