1. 程式人生 > >如何自己添加開機啟動服務

如何自己添加開機啟動服務

linux

在centos6如何添加開機啟動服務

在centos6中啟動某項服務都是用一條service的命令跟服務名來啟動關閉(重啟),或者查看狀態的。只要安裝某項服務直接service命令就可以執行三種狀態,今天就跟我一起來看看怎麽用一個簡單的小腳本來用service命令執行它並設置成開機啟動!

#我實現寫好了一個名叫mydeamon的腳本

首先看看我的腳本裏都寫了些什麽:

case $1 in

[Rr][eE][sS][Tt][aA][Rr][Tt])
        re        re調用重啟的函數
        ;;
[Ss][Tt][Aa][Tt][uU][Ss])
        ss        ss查看狀態的函數
        ;;
[sS][Tt][aA][Rr][Tt])
        st        st表示開啟服務的函數
        ;;
[sS][Tt][Oo][Pp])
        sp        sp表示關閉服務的函數
        ;;
*)
        echo "請輸入正確參數!"
        ;;
esac

註釋:1上面re,st,ss,sp是我定義的四個函數

2函數定義了當腳本接到start命令時在/var/lock/下創建一個文件,當在執行時也就是文件存在時判斷文件是否存在。若存在,報出服務正在運行的啟動錯誤

3 stop參數也是判斷文件是否存在存在表明服務在運行,刪掉文件表示停止服務。若已經停止再次接收到stop參數,也就是沒有文件存在,先判斷文件是否存在,不存在報錯服務沒有運行。

4 restart 先停止在啟動,若本沒有運行報出停止錯誤的報錯,執行啟動。

5 status 查看運行狀態,判斷文件是否存在,存在給出提示(比如deamon is running)不存在則顯示沒有運行。

首先看一下重點,雖然上面扯了一堆註釋,寫了個case來接受執行腳本時給腳本傳遞的參數,現在執行腳本給個start的參數看看什麽效果。

[[email protected] 1]# ./mydeamon start
./mydeamon start				[  o k  ]
[[email protected] 1]#

現在來看是不是跟啟動系統服務好像啊.....現在還是執行腳本來顯示了個ok字樣而已!對了現在已經執行了一遍start,也就是啟動服務了已經,在執行一次start會怎麽樣呢?

[[email protected] 1]# ./mydeamon start
./mydeamon is running			[ false ]
[[email protected] 1]#

都知道false一般啟動服務是失敗時才會出現的字眼,現在表明啟動失敗了,為什麽呢?因為已經在運行了怎麽能在啟動一遍呢。

既然這樣其他的stop,restart,status我就不一一執行了直接來看怎麽才能用centos6裏面自帶的service來執行這個腳本。


首先介紹一個目錄,對!!!很重要的目錄!!!

[[email protected] 1]# cd /etc/init.d/
[[email protected] init.d]# 
[[email protected] init.d]# 
[[email protected] init.d]# ls
abrt-ccpp         httpd         oddjobd       rsyslog
abrtd             ip6tables     openct        sandbox
abrt-oops         iptables      ospf6d        saslauthd
acpid             irqbalance    ospfd         single
atd               kdump         pcscd         smartd
auditd            killall       portreserve   snmpd
autofs            lvm2-lvmetad  postfix       snmptrapd
bgpd              lvm2-monitor  pppoe-server  spice-vdagentd
blk-availability  mdmonitor     psacct        sshd
bluetooth         messagebus    quota_nld     sssd
certmonger        mydeamon      rdisc         svnserve
cpuspeed          mysqld        rdma          sysstat
crond             netconsole    restorecond   udev-post
cups              netfs         ripd          watchquagga
dnsmasq           network       ripngd        wdaemon
firstboot         nfs           rngd          winbind
functions         nfslock       rpcbind       wpa_supplicant
haldaemon         nfs-rdma      rpcgssd       xinetd
halt              ntpd          rpcidmapd     ypbind
htcacheclean      ntpdate       rpcsvcgssd    zebra
[[email protected] init.d]#

這個/etc/init.d/ 這個目錄下放的都是服務,開機啟動的不啟動的都放在這裏,只要把我剛才寫的腳本放在這裏之後。。。。還是不能用service調用 0*0

剛說完一個目錄現在來說說一個命令chkconfig

chkconfig可以跟上的幾個後綴比如 --list 若在後面跟上服務名可以查看某個服務,不跟查看所有服務。比如下面這樣:

[[email protected] init.d]# chkconfig --list
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off
acpid          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
autofs         	0:off	1:off	2:off	3:on	4:on	5:on	6:off
.......
上面只顯示了一部分下面省略
[[email protected] init.d]# chkconfig --list nfs
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[[email protected] init.d]#

上面就是顯示單個服務和所有服務,0-6顯示off和on是開機啟動級別,比如5;on 就是在開機啟動級別為5時啟動該服務,相反off則不啟動(開機啟動級別就不在這裏涉及了)

第二:--add 跟上腳本/服務名 即添加為真正的服務

[[email protected] init.d]# chkconfig --add mydeamon 
[[email protected] init.d]#

沒報錯說明執行成功 0.0

第三:--del 沒錯add是添加del就是刪除

好先跳過這裏回到add的。。。。。。。

用add添加的時候要有前提的,bash腳本的開頭要有#!/bin/bash,這雖然不是必須的但是是個好習慣,但是添加服務必須要兩條註釋雖然最重要的只有一條,嘿嘿嘿!就是下面這樣子

#!/bin/bash
# -----------------------
# chkconfig: 345 98 03
# description: msr
# -----------------------

chkconfig這行添加的內容第一串數字表示在哪些啟動級別開機啟動我的也就是在init3/4/5的時候開機啟動該服務。

98...說到這個98(數字並不唯一)在/etc/下有一些rc*.d/的目錄*可以為0-6。比如/etc/rc5.d/這個目錄下都是一些S或K開頭的文件,當用戶用chkconfig在/etc/init.d/下添加服務時,系統根據註釋信息的三個字符串來在這些目錄下創建文件。就用我的腳本來說明,345、98、03即在rc3.d rc4.d rc5.d 創建S98開頭的軟連接,其他目錄則創建K03開頭的軟連接。S後面數字越小系統啟動時優先級越高,K後數字越小表明關閉服務時越先關閉,這裏也直接說明了我寫的腳本註釋裏03的意思。(裏面也說到了S啟動軟連接,K關閉軟連接)

只要用add添加服務,/etc/rc*.d/自動創建軟鏈接,而剛才說到的--del加上服務則是刪除軟連接。並不刪除/etc/init.d/下的服務文件或者腳本。想要刪除文件,還需自己手動來刪除文件了。

好了到這裏就可以自己添加一個開機啟動和停止腳本了。添加腳本時自己先行測試一下還是必要的,免得開機啟動的時候啟動到自己添加的腳本時出問題啟動不起來那尷尬了。。。




本文出自 “mlon客” 博客,請務必保留此出處http://13154101.blog.51cto.com/13144101/1965904

如何自己添加開機啟動服務