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還要晚一些~