文档章节

用service命令和chkconfig命令管理服务进程

吕明明
 吕明明
发布于 2013/06/14 23:26
字数 1848
阅读 7714
收藏 16

  service命令可以快速地开启和停止linux中的服务程序,这在调试过程中非常有用.chkconfig命令可以快速地设置开机时需要自动启动的服务程序.
  这两个命令的功能都可以通过其他方法实现,只不过有了它们之后更加方便,维护工作可以更加轻松.

service命令和进程管理脚本

  在debian linux中如果用apt-get命令安装mysql,nginx等服务程序,安装程序都会自动在/etc/init.d/目录中创建一个管理此服务进程用的shell脚本,如:

/etc/init.d/mysql
/etc/init.d/nginx
/etc/init.d/keepalived

  这样就用可以用/etc/init.d/{脚本文件名} start service {脚本文件名} start 来启动一个服务,如:

#启动mysql服务
/etc/init.d/mysql start 
service mysql start
  如果进程管理脚本支持restart命令参数,还可以用 /etc/init.d/{脚本文件名} restart service {脚本文件名} restart 来重新启动 一个服务,如:
#重新启动mysql服务
/etc/init.d/mysql restart 
service mysql restart

  上面两个命令的效果是一样的,这样重启mysql或php-fpm的时候就不用每次都先把进程kill掉,然后写一大段路径和参数来启动服务了.只不过用service命令的话只要记住脚本文件名,不用写绝对地址,这样比较方便,默认的脚本文件名都是和服务程序的名字一样的.

  如果自己编译安装php-fpm等服务程序,/etc/init.d目录中的这个脚本是需要自己加的.幸运的是很多服务程序的源码包中都附带了这个脚本如:

mysql5.6源码中的 support-files/mysql.server 
php5.4源码中的 sapi/fpm/init.d.php-fpm 
redis2.6源码中的 utils/redis_init_script
这些就是应用程序官方提供的进程管理脚本,把它们复制到/etc/init.d目录中,顺便改一个简短点儿的名字,就可以用service 命令管理服务进程了.别忘了给复制到/etc/init.d中的脚本加可执行权限.
chmod +x /etc/init.d/mysql /etc/init.d/nginx /etc/init.d/redis

  有的时候需要修改脚本中的参数如路径名等才能顺利执行,需要简单调试一下.

  这里需要注意一下service命令后面的参数
  service命令后面的第一个参数,一定要和/etc/init.d中的脚本名字一样,要不然系统会报错,为了简单,可以直接命名成服务程序名字.
  service命令的第二个参数,如start,stop,restart,它是传给进程管理脚本的.所以是否支持这个参数不是service命令决定的,是进程管理脚本决定的,使用不同的进程管理脚本,可以选择的命令参数和功能也是不同的.
  进程管理脚本都会支持start和stop两个命令参数,还有可能支持其他的命令参数.一般可以用service {脚本名} 查看脚本的帮助信息,里面有支持的命令参数如:

root@lvmingming:/etc/init.d# service mysql
Usage: /etc/init.d/mysql start|stop|restart|reload|force-reload|status
root@lvmingming:/etc/init.d# service redis
Please use start or stop as first argument
root@lvmingming:/etc/init.d# service memcached
Usage: /etc/init.d/memcached {start|stop|restart|force-reload|status}
  也有些服务,如用apt-get安装的keepalived的管理脚本,用这个方法查看不到帮助信息.想知道这个脚本里支持哪些命令参数,只能自己读一下脚本了,shell脚本的语法比较简单,还是挺容易看懂的.

  如果需要编译安装服务程序,并且源码里没有进程管理脚本,如memcached.那只能上网查别人写好的脚本了.要不然自己写个进程管理脚本也不错~


chkconfig命令和/etc/rc.local脚本

  chkconfig命令可以用来配置某一项服务是否开机自动启动,有些版本的linux需要自己手动安装这个命令,如debian linux中安装chkconfig命令: 

apt-get install chkconfig
  如果没有chkconfig命令,想添加一项开机自动启动的服务,可以把开启服务的命令放进/etc/rc.local中,只不过用chconfig命令更加方便
  chkconfig命令同样要依赖放在/etc/init.d目录中的进程管理脚本.
  chkconfig命令示例:
#以下脚本在debian linux中测试通过
chkconfig --help #查看chkconfig命令语法
chkconfig -l #查看所有服务程序在所有运行级别下的是否开机自动启动
chkconfig -l mysql #查mysql服务在所有运行级别下的是否开机自动启动
chkconfig -a mysql #在服务列表中添加新的服务mysql并设置成开机自动启动
chkconfig -d mysql #取消mysql服务的开机自动启动设置
chkconfig -s mysql 2345 #让mysql在2345这几个运行级别下开机自动启动,如果某一运行级别下的链接没有正确添加,可以使用这个命令添加一下.


chkconfig的原理

  /etc目录下有一组rc开头目录,它们用来存放在各个运行级别下linux自动启动的服务:
/etc/rcS.d/  #开机后需要自动启动的一些基本服务
/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目录中.
  debian linux的默认运行级别是2,看一下/etc/rc2.d/中的内容
root@lvmingming:~# ls -l /etc/rc2.d/
total 4
-rw-r--r-- 1 root     root     677 Nov 17  2012 README
lrwxrwxrwx 1 root     root      17 May 30  2011 S01ipvsadm -> ../init.d/ipvsadm
lrwxrwxrwx 1 root     root      17 Feb  6 13:45 S16apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root     root      20 Jun 10 16:31 S17keepalived -> ../init.d/keepalived
lrwxrwxrwx 1 root     root      19 Jun 13 13:54 S17memcached -> ../init.d/memcached
lrwxrwxrwx 1 root     root      15 Feb  6 13:45 S17mysql -> ../init.d/mysql
lrwxrwxrwx 1 root     root      28 Feb 16 13:14 S17nagios-nrpe-server -> ../init.d/nagios-nrpe-server
lrwxrwxrwx 1 root     root      15 Feb  6 13:45 S17nginx -> ../init.d/nginx
lrwxrwxrwx 1 root     root      15 Feb  6 13:45 S17rsync -> ../init.d/rsync
lrwxrwxrwx 1 root     root      16 Feb  6 13:45 S17vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root     root      22 Apr  3 14:06 S18avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root     root      15 Feb  6 13:45 S18exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root     root      18 Feb  6 13:45 S20rc.local -> ../init.d/rc.local
  用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还要晚一些~


© 著作权归作者所有

吕明明
粉丝 5
博文 7
码字总数 12388
作品 0
朝阳
程序员
私信 提问
加载中

评论(1)

苏生不惑
苏生不惑
学习了,不过和centos还是有些区别的
服务管理

1.chkconfig命令 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。 [root@test_01 ~]# chkconfig --list 注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务...

LavenDer7n
2017/12/05
0
0
Linux下chkconfig命令详解

chkconfig命令用来更新和查询不同运行级上的系统服务 简单地说,比如你安装了mysql,并且你把启动的脚本放在了/etc/rc.d/init.d目录下,有时候你需要开机自动启动它,而有时候则不需要,因此...

Junn
2014/04/03
5.7K
0
linux任务计划、chkconfig,systemctl介绍及常用命令 ,unit和target介绍

10.23 linux任务计划cron [root@centos6 ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs Example of job......

zgxlinux
2018/10/30
31
0
RedHatEL7 的一些新的操作【待更新】

1、挂载光驱 # mount /dev/cdrom /media 2、安装时默认的文件系统从ext4改为xfs /dev/mapper/rhel_rh7-root xfs 50G 4.8G 46G 10% / 说明:rhelrh7-root的组成是rhel主机名-分区标签 3、管理...

LionelShen
2016/04/18
70
0
fedora 16 yum 安装mysql后怎样启动,以及添加为系统服务

1 yum 安装mysql #yum install mysql mysql-server mysql-devel 如果遇到 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var 可以使用下面的命令: 启动mysql......

chengxw
2013/07/19
2.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部