Shell脚本安装成服务加入系统启动-service XX does not support chkconfig

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

背景:Shell脚本是linux运维人员必备利器,怎么样把shell脚本安装成服务且加入系统启动,然后就可以使用服务来管理,这是一个很重要的问题。


当我们运行安装服务的命令时候,假设服务名为myservice

#chkconfig --add myservice

常常会出现

service myservice does not support chkconfig



下面讲解正确方法:



1.1给服务脚本添加注释。


#vim /etc/init.d/myservice

添加下面两句到 #!/bin/bash 之后。

# chkconfig: 2345 10 90 
# description: myservice ....

第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺
省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以
用\ 跨行注释。

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

  等级0表示:表示关机   

  等级1表示:单用户模式   

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

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

  等级4表示:不可用   

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

  等级6表示:重新启动

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


1.2  服务脚本必须存放在/etc/ini.d/目录下;

1.3 chkconfig --add servicename
    在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
    
1.4 chkconfig --level 2345 servicename on      修改服务的默认启动等级。




二、 另外还要注意几个问题:


1)启动脚本的标准结构:


case "$1" in
    start)
        do start-thing;
        ;;
    stop)
        do stop-thing;
        ;;
    restart)
        do restart-thing;
        ;;
    ...
esac

你如果按这种结构写个启动脚本测试一下就会发现,若该脚本的软连接以S开头,则系统启动的时候
执行start-thing代码段,若该脚本的软连接以K开头的话,则系统启动时执行stop-thing代码段
(有一点儿例外的是运行级别0,因为0级别是关闭系统,所以/etc/rc0.d/下的以S开头的软连接
也执行stop-thing段)。是不是很智能化,所以如果可以的话启动脚本最好写标准一些。如果你非
写成普通的脚本,就几个命令,没有上面那个结构,建立以K或S开头的软连接会怎么执行呢?
答案是全部执行。



2)chkconfig

 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

 

使用语法:

chkconfig [--add][--del][--list][系统服务 chkconfig[--level <等级代号>][系统服务][on/off/reset]

chkconfig在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否 在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了onoff或者reset,那么chkconfig 会改变指定服务的启动信息。onoff分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。onoff关,系统默认只对运行级345有效,但是reset可以对所有运行级有效。

 

使用范例:

chkconfig --list        #列出所有的系统服务

chkconfig --add httpd     #增加httpd服务

chkconfig --del httpd     #删除httpd服务

chkconfig --level httpd 2345 on #设置httpd在运行级别为2345的情况下都是on(开启)的状态

chkconfig --list        #列出系统所有的服务启动情况

chkconfig --list mysqld     #列出mysqld服务设置情况

chkconfig --level 35 mysqld on #设定mysqld在等级35为开机运行服务,--level35表示操作只在等级35执行,on表示启动,off表示关闭

chkconfig mysqld on     #设定mysqld在各等级为on,“各等级”包括2345等级

 

/etc目录下有一组rc开头目录,它们用来存放在各个运行级别下linux自动启动的服务:

/etc/rc0.d/ #运行模式0下需要启动的服务

/etc/rc1.d/ #运行模式1下需要启动的服务

/etc/rc2.d/ #运行模式2下需要启动的服务

/etc/rc3.d/ #运行模式3下需要启动的服务

/etc/rc4.d/ #运行模式4下需要启动的服务

/etc/rc5.d/ #运行模式5下需要启动的服务

/etc/rc6.d/ #运行模式6下需要启动的服务

这些目录中除README说明文档之外放的都是些软链接(符号链接),这些链接指向各服务的进程管理脚本,而这些进程管理脚本都放在/etc/init.d目录中.

 

  用chkconfig命令操作的添加或者删除开机自动启动服务程序,其实就是创建或删除这些目录中的软链接每个软链接的命名都是"大写S+运行顺序+脚本名称",里面有一个链接是"S20rc.local -> ../init.d/rc.local".打开它指向的脚本/etc/init.d/rc.local看一下,发现它里面调用了/etc/rc.local这个脚本.原来/etc/rc.local中的命令是在这儿执行的.

  如果把mysql服务的启动命令放进/etc/rc.local,操作系统也会在执行这个列表的时候执行它,不过它的执行顺序是20,比排在前面的S17mysql还要晚一些~

chconfig --level 2345 puppet off 等价于 chkconfig puppet off (不用--level 指定级别时,默认是2345

这条命令是设置 puppet 服务在 2345级别不自动启动,当执行这条命令时,会在

rc2.d rc3.d rc4.d rc5.d 这几个目录新建软连接K02puppet  /etc/rc.d/init/puppet 脚本

chkconfig puppet on 这个就是在2345级别时,开机自动启动

当执行这条命令时,会在

rc2.d rc3.d rc4.d rc5.d 这几个目录新建软连接S98puppet  /etc/rc.d/init/puppet 脚本

那这个 K02puppet S98puppet 中的 02  98 是怎么来的?

打开/etc/rc.d/init.d/puppet这个脚本文件,看前几行 如下:

 

#!/bin/bash

# puppet        Init script for running the puppetclient daemon

#

# Author:       Duane Griffin

#               David Lutterkort

#

# chkconfig: - 98 02

#

# description: Enables periodic systemconfiguration checks through puppet.

# processname: puppet

# config: /etc/sysconfig/puppet

特别是这行

# chkconfig: - 98 02

chkconfig 命令会读取这一行,来获取运行级别和那2个数字的,在这个脚本里面



本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1795909,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
66 1
|
8天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
30 2
6种方法打造出色的Shell脚本
|
13天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
38 6
|
10天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
41 2
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
20 0
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
60 12
|
2月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
277 2
|
2月前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
63 18