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,然后向左移动一位后,将所有的参数($@)作为一个命令来执行
$@组成的这个命令的返回值如果为真,就打印 $1 [ok],这里的$1是原来的$1
$@组成的这个命令的返回值如果为假,就打印 $1 [FAILED],这里的$1是原来的$1
如ntpd这个指定本身会启动ntp服务,本身执行这个命令就是会成功开启ntpd服务,所有当执行
action start ntpd
这个命令$@就是 ntpd,显示为如下,可以正确表达了意思
start [OK]
如果移动位置后的$@不是一个命令,那么就是会显示失败
所有用action这个函数,要知道当$1被移动位置后的$@执行的结果,再指定$1的内容,这样才能正确表示意思
执行如下语句,service ntpd stop&>/dev/null本身是一条完整的停止服务的命令
这里$1是stop ntpd,把$1移动位置后,$@是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