service命令能够快速地开启和中止linux中的服务程序,这在调试过程当中很是有用.chkconfig命令能够快速地设置开机时须要自动启动的服务程序.
这两个命令的功能均可以经过其余方法实现,只不过有了它们以后更加方便,维护工做能够更加轻松.
php
在debian linux中若是用apt-get命令安装mysql,nginx等服务程序,安装程序都会自动在/etc/init.d/目录中建立一个管理此服务进程用的shell脚本,如: mysql
/etc/init.d/mysql /etc/init.d/nginx /etc/init.d/keepalived
这样就用能够用/etc/init.d/{脚本文件名} start 或 service {脚本文件名} start 来启动一个服务,如: linux
#启动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命令的话只要记住脚本文件名,不用写绝对地址,这样比较方便,默认的脚本文件名都是和服务程序的名字同样的. ios
若是本身编译安装php-fpm等服务程序,/etc/init.d目录中的这个脚本是须要本身加的.幸运的是不少服务程序的源码包中都附带了这个脚本如: nginx
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
有的时候须要修改脚本中的参数如路径名等才能顺利执行,须要简单调试一下. redis
这里须要注意一下service命令后面的参数
service命令后面的第一个参数,必定要和/etc/init.d中的脚本名字同样,要否则系统会报错,为了简单,能够直接命名成服务程序名字.
service命令的第二个参数,如start,stop,restart,它是传给进程管理脚本的.因此是否支持这个参数不是service命令决定的,是进程管理脚本决定的,使用不一样的进程管理脚本,能够选择的命令参数和功能也是不一样的.
进程管理脚本都会支持start和stop两个命令参数,还有可能支持其余的命令参数.通常能够用service {脚本名} 查看脚本的帮助信息,里面有支持的命令参数如: sql
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.那只能上网查别人写好的脚本了.要否则本身写个进程管理脚本也不错~ shell
chkconfig命令能够用来配置某一项服务是否开机自动启动,有些版本的linux须要本身手动安装这个命令,如debian linux中安装chkconfig命令: apache
apt-get install chkconfig若是没有chkconfig命令,想添加一项开机自动启动的服务,能够把开启服务的命令放进/etc/rc.local中,只不过用chconfig命令更加方便
#如下脚本在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这几个运行级别下开机自动启动,若是某一运行级别下的连接没有正确添加,可使用这个命令添加一下.
/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目录中.
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还要晚一些~