linux系統自帶函數庫介紹
1 概述
/etc/init.d/functions這個這個系統自帶的函數庫在/etc/init.d裏,很多腳本執行的時候會調用這裏的函數。
這個文件首先會設置umask,path,還有語言環境等,然後會設置success,failure,warning,normal四種情況下的字體顏色。
該文件共定義了33個函數
本文將針對CentOS6S上的一些函數的用法進行介紹
2 函數介紹
daemon
啟動某個服務。這裏的服務名 都是放置/etc/init.d路徑下的啟動腳本的文件名,如ntpd
函數的$1為服務名
默認用法 函數 服務名
如:daemon ntpd
函數的$1如果不是服務名,可以有其他的選項,如下
進程服務名放置第4個位置參數$3位,$2可以任意參數
--check,--user, --pidfile
如:daemon --check start ntpd
進程服務名放置第3個位置參數$2位:
--check=?*,--user=?*,--pidfile=?*,--force,[-+][0-9]*
daemon --check=ntpd ntpd
killproc
殺死某個進程。和 daemon相反的作用
這裏$1是服務名,則是放置/etc/init.d路徑下的啟動腳本的文件名,如ntpd
用法 函數名 服務名
如 killproc ntpd
這裏$1不是服務名,為其他參數,如-p,$2是放在在/var/run/服務名.pid的這類文件
用法 killproc -p pid_file
如 killproc -p /var/run/ntpd.pid
status
返回一個服務的狀態,
$1如果是服務名,用法如下
用法 函數 服務名
如 status ntpd 結果為 ntpd (pid 23767) is running...的提示
如果$1不是函數名,如-p或-l,用法如下
$1=-p,pid_file=$2 $2是文件:/var/run/服務名.pid
$1=-l,lock_file=$2 ,$2是/var/lock/subsys下的文件名
$3為進程名
用法 status $1 $2 $3
如 status -l /var/lock/subsys/atd.pid atd
或 status -p /var/run/atd.pid atd
action
打印$1,然後向左移動一位後,將所有的參數([email protected])作為一個命令來執行
[email protected]組成的這個命令的返回值如果為真,就打印 $1 [ok],這裏的$1是原來的$1
[email protected]組成的這個命令的返回值如果為假,就打印 $1 [FAILED],這裏的$1是原來的$1
如ntpd這個指定本身會啟動ntp服務,本身執行這個命令就是會成功開啟ntpd服務,所有當執行
action start ntpd
這個命令[email protected]就是 ntpd,顯示為如下,可以正確表達了意思
start [OK]
如果移動位置後的[email protected]不是一個命令,那麽就是會顯示失敗
所有用action這個函數,要知道當$1被移動位置後的[email protected]執行的結果,再指定$1的內容,這樣才能正確表示意思
執行如下語句,service ntpd stop&>/dev/null本身是一條完整的停止服務的命令
這裏$1是stop ntpd,把$1移動位置後,[email protected]是service ntpd stop&>/dev/null,這是一條完整的命令
action "stop ntpd" `service ntpd stop&>/dev/null`
執行結果如下,命令執行後就可以正確命令執行的結果
stop ntpd [ OK ]
checkpid
驗證pid對應的服務是否存在,檢查路徑/proc下是否已存在pid,如果有一個存在,函數返回值是0,否則函數返回值是1
用法 函數 pid(這裏的pid是數字,代表/proc目錄下的某個進程文件名稱,也是進程號)
如 checkpid 1
__pids_var_run
查看某個服務名是否存在,存在返回狀態碼0,不存在返回1,3或4
如果$1是進程的服務名
用法 __pids_var_run $1
如 __pids_var_run atd 進程存在,返回狀態碼0,這裏會把進程號賦值給pid這個變量,但是不打印出來
如果$1不是進程的服務名,就檢查$2,$2是放在/var/run/服務名.pid
用法 __pids_var_run $1 /var/run/服務名.pid
如 __pids_var_run -a /var/run/atd.pid 進程存在,返回狀態碼0
pidfileofproc
尋找進程服務名的pid,因為調用了__pids_var_run $1用法,所以僅僅通過pid_file來查找進程id
用法 pidfileofproc 服務名
如 pidfileofproc atd ,結果顯示pid的進程id
__pids_pidof
通過pidof命令查看進程id
用法 __pids_pidof 服務名
如 __pids_pidof atd 結果會顯示進程id
pidofproc
調用了兩個函數來查找進程id,如果要查看服務的進程id,建議用這個腳本來查看更詳細
__pids_var_run和__pids_pidof兩個函數
用法 pidofproc 進程名
如 pidofproc atd
echo_success,echo_failure,echo_passed,echo_warning
分別輸出各類信息,
如成功綠色OK,失敗紅色FAILED,通過藍色PASSED,警告黃色WARNING
用法 直接運行函數
如 echo_success
__readlink
將函數後面的每個參數用一行讀出,如果參數不存在,則忽略該參數
用法 __readlink $1 $2 $3 ...
如 __readlink aa aa.bak test.sh 如果這三個參數文件存在,就一行行顯示,不存在就直接忽略
strstr
判斷$1是否含有$2,如果$1含有$2,那麽返回值$?為0,否則為1
用法 strstr $1 $2
如 strstr abcd bc ,結果為真,返回0
strstr abxcd bc ,結果為假,返回1
confirm
確認是否真的要運行此服務,如果是y|Y就返回0,C返回2,n|N返回1,我們可以判斷返回值來確定是否要進行下一步
用法 confirm
顯示 "Start service $1 (Y)es/(N)o/(C)ontinue? [Y]"的提示信息,輸入y,Y,n,N,C等
is_ignored_file :檢查文件$ 1是備份還是rpm生成的文件,並且應該被忽略
用法 is_ignored_file $1 如果是要被忽略的,就返回0.否則返回1
get_numeric_dev
將設備轉換為用10進制或者16進制的格式的數值現在,格式為major:minor
$1可以指定為 指定為fmt或者hex,fmt為10進制,hex為16進制,$2為設備,如/dev/sda
用法 get_numeric_dev $1 $2
如 get_numeric_dev hex /dev/sr0
get_numeric_dev dev /dev/sr0
is_true
判斷函數的$1是否為 [tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE] 是的話,返回值為0,否則返回值為1
用法 is_true $1
如 is_true y 結果返回值為0
is_false
判斷函數的$1是否為 [fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE] 是的話,返回值為0,否則返回值為1
用法 is_false $1
如 is_false n 結果返回值為0
3 小結
以上只是函數庫的一部分,函數在運行的過程可以互相調用。更詳細的函數用法,請參考系統文件/etc/init.d/functions
本文出自 “自學linux” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1962335
linux系統自帶函數庫介紹