1.几个显示函数
2.action函数
3.is_true和is_false函数
4.confirm函数
5.pid检测相关函数
5.1 checkpid、__pids_var_run和__pids_pidof函数
5.2 pidfileofproc和pidofproc函数
6.重头戏(一):daemon函数
7.重头戏(二):killproc函数
8.重头戏(三):status函数
9.几个重要函数的总结和使用说明
9.1 pid相关
9.2 daemon的使用
9.3 killproc的使用
9.4 status的使用
10.memcached服务启动脚本示例
/etc/rc.d/init.d/functions几乎被/etc/rc.d/init.d/下所有的Sysv服务启动脚本加载,也是学习shell脚本时一个非常不错的材料,在其中使用了不少技巧。
在该文件中提供了几个有用的函数:
daemon:启动一个服务程序。启动前还检查进程是否已在运行。
killproc:杀掉给定的服务进程。
status:检查给定进程的运行状态。
success:显示绿色的"OK",表示成功。
failure:显示红色的"FAILED",表示失败。
passed:显示绿色的"PASSED",表示pass该任务。
warning:显示绿色的"warning",表示警告。
action:根据进程退出状态码自行判断是执行success还是failure。
confirm:提示"(Y)es/(N)o/(C)ontinue? [Y]"并判断、传递输入的值。
is_true:"$1"的布尔值代表为真时,返回状态码0,否则返回1。包括t、y、yes和true,不区分大小写。
is_false:"$1"的布尔值代表为假时,返回状态码0。否则返回1。包括f、n、no和false,不区分大小写。
checkpid:检查/proc下是否有给定pid对应的目录。给定多个pid时,只要存在一个目录都返回状态码0。
__pids_var_run:检查pid是否存在,并保存到变量pid中,同时返回几种进程状态码。是functions中重要函数之一。
__pids_pidof:获取进程pid。
pidfileofproc:获取进程的pid。但只能获取/var/run下的pid文件中的值。
pidofproc:获取进程的pid。可获取任意给定pidfile或默认/var/run下pidfile中的值。
前三个是functions文件最重要的3个函数,还用到了一些额外的辅助函数,稍稍有点复杂。所以由简至繁,先介绍并展示后面几个函数,再回头解释前3个函数。
以下是/etc/init.d/functions文件的开头定义的语句。设置umask值,使得加载该文件的脚本所在shell的umask为22。导出路径变量。但说实话,这个导出的路径变量并不理想,因为要为非rpm包安装的程序设计服务启动脚本时,必须写全路径命令,例如/usr/local/mysql/bin/mysql。因此,可以考虑将/etc/init.d/functions中的语句注释掉。
umask 022 # Set up a default search path. PATH="/sbin:/usr/sbin:/bin:/usr/bin" export PATHPS:本文分析的/etc/init.d/functions文件是CentOS 7上的,和CentOS 6有些许区别,但该有的目的和动作都有。
1.几个显示函数包括echo_success、success、echo_failure、failure、echo_passed、passed、echo_warning和warning函数。这几个函数的定义方式和使用方法完全一样。
以下是echo_success和success函数的定义语句。
echo_success() { [ "$BOOTUP" = "color" ] && $MOVE_TO_COL echo -n "[" [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS echo -n $" OK " [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL echo -n "]" echo -ne "\r" return 0 } success() { [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success return 0 }