Linux启动脚本分析之functions.docx

上传人:b****2 文档编号:23223952 上传时间:2023-05-15 格式:DOCX 页数:18 大小:24.35KB
下载 相关 举报
Linux启动脚本分析之functions.docx_第1页
第1页 / 共18页
Linux启动脚本分析之functions.docx_第2页
第2页 / 共18页
Linux启动脚本分析之functions.docx_第3页
第3页 / 共18页
Linux启动脚本分析之functions.docx_第4页
第4页 / 共18页
Linux启动脚本分析之functions.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Linux启动脚本分析之functions.docx

《Linux启动脚本分析之functions.docx》由会员分享,可在线阅读,更多相关《Linux启动脚本分析之functions.docx(18页珍藏版)》请在冰豆网上搜索。

Linux启动脚本分析之functions.docx

Linux启动脚本分析之functions

Linux启动脚本分析之functions

#-*-Shell-script-*-

#

#functions Thisfilecontainsfunctionstobeusedbymostorall            #注释:

该脚本几乎被/etc/init.d/下的所有脚本所调用,因为它包含了大量的

#  shellscriptsinthe/etc/init.ddirectory.                                          #的基础函数。

同时也被/etc/rc.d/rc.sysinit,例如success、action、failure等函数

#

 

TEXTDOMAIN=initscripts                #设置TEXTDOMAIN变量

 

 

##########################################################################################################################################################

#Makesureumaskissane            #确保root用户的umask是正确的022(也就是rwxr-xr-x)

umask022

 

#Setupadefaultsearchpath.                                        #设置默认的PATH变量

PATH="/sbin:

/usr/sbin:

/bin:

/usr/bin:

/usr/X11R6/bin"         #默认为/sbin:

/usr/sbin:

/bin:

/usr/bin:

/usr/X11R6/bin

exportPATH                                                                  #导出为环境变量

 

#Getasanescreenwidth                                                #设置正确的屏幕宽度

[-z"${COLUMNS:

-}"]&&COLUMNS=80                                #如果COLUMNS变量的值为空,则设置为80(列)

 

[-z"${CONSOLETYPE:

-}"]&&CONSOLETYPE="`/sbin/consoletype`"            #如果CONSOLETYPE为空则设置CONSOLETYPE为/sbin/consoletype命令返回的值

                                                                                                            #一般是vt或者pty、serial

##########################################################################################################################################################

if[-f/etc/sysconfig/i18n-a-z"${NOLOCALE:

-}"];then                            #如果存在/etc/sysconfig/i18n且 NOLOCALE 变量的值为空,则

      ./etc/sysconfig/i18n                                                                                        #执行/etc/sysconfig/i18n文件,取得LANG变量的值

      if["$CONSOLETYPE"!

="pty"];then                                                                    #如果当前console类型不是pty(远程登录),而是vt或者serial,则

          case"${LANG:

-}"in                                                                                                    #根据LANG的值作出选择

              ja_JP*|ko_KR*|zh_CN*|zh_TW*|bn_*|bd_*|pa_*|hi_*|ta_*|gu_*)                                        #如果LANG是 日文、中文简体、中文繁体、韩文等,则

                   exportLC_MESSAGES=en_US                                                                                                # 把LC_MESSAGES设置为en_US

                   exportLANG                                                                                                                       #同时导出为环境变量

                   ;;

              *)

                   exportLANG                                                                                                                #如果是其他类型的语言,则直接导出LANG

               ;    ;

         esac

      else                                                                                                                    #如果当前consle是pty                                                   

       [-n"$LC_MESSAGES"]&&exportLC_MESSAGES                                                        #且如果LC_MESSAGES不为空,则直接导出LC_MESSAGES

      exportLANG

 fi

fi

##########################################################################################################################################################

 

#下面是设置success、failure、passed、warning4种情况下的字体颜色的

 

#Readinourconfiguration

if[-z"${BOOTUP:

-}"];then                                                #首先如果BOOTUP 变量为空,则

 if[-f/etc/sysconfig/init];then                                            #如果存在/etc/sysconfig/init文件,执行/etc/sysconfig/init文件

     ./etc/sysconfig/init

 else                                                                                    #否则我们就手工设置

   #Thisallseemconfusing?

Lookin/etc/sysconfig/init,

   #orin/usr/doc/initscripts-*/sysconfig.txt

   BOOTUP=color                                                                        # 第一设置BOOTUP变量,默认就是color

   RES_COL=60                                                                          #第二设置设置在屏幕的第几列输出后面的"[xxx]",默认是第60列

   MOVE_TO_COL="echo-en\\033[${RES_COL}G"                          #MOVE_TO_COL是用于打印"OK"或者"FAILED",或者"PASSED",或者 "WARNING" 之前的部分,不含"["

   SETCOLOR_SUCCESS="echo-en\\033[1;32m"                             # SETCOLOR_SUCCESS 设置后面的字体都为绿色

   SETCOLOR_FAILURE="echo-en\\033[1;31m"                             #SETCOLOR_FAILURE设置后面将要输出的字体都为红色

   SETCOLOR_WARNING="echo-en\\033[1;33m"                           #SETCOLOR_WARNING设置后面将要输出的字体都为黄色

   SETCOLOR_NORMAL="echo-en\\033[0;39m"                              # SETCOLOR_NORMAL设置后面输出的字体都为白色(默认)

   LOGLEVEL=1

 fi

 if["$CONSOLETYPE"="serial"];then                                        #如果是通过串口登录的,则全部取消彩色输出

     BOOTUP=serial

     MOVE_TO_COL=

     SETCOLOR_SUCCESS=

     SETCOLOR_FAILURE=

     SETCOLOR_WARNING=

     SETCOLOR_NORMAL=

 fi

fi

 

##########################################################################################################################################################

if["${BOOTUP:

-}"!

="verbose"];then                    #如果BOOTUP变量的值不为verbose,则

  INITLOG_ARGS="-q"                                                    #把INITLOG_ARGS的值设置为-q(安静模式)

else                                                                    #否则

  INITLOG_ARGS=                                                        #把INITLOG_ARGS的值请空 

fi

##########################################################################################################################################################

#Checkif$pid(couldbeplural)arerunning            #下面定义一个函数checkpid(),目的是检查/proc下是否存在指定的目录(例如/proc/1/)

checkpid(){                                                        #如果有任意一个存在,则返回0;

 locali

 

 foriin$*;do

  [-d"/proc/$i"]&&return0

 done

 return1                                                            #如果给出的参数全部不存在对应的目录,则返回1

}

 

##########################################################################################################################################################

#Afunctiontostartaprogram.                            #下面定义最重要的一个函数,daemon函数,它的作用是启动某项服务。

/etc/init.d/下的脚本的start部分都会用到它

daemon(){

 #Testsyntax.

 localgotbase=force=

 localbase=user=nice=bg=pid=

 nicelevel=0

 while["$1"!

="${1##[-+]}"];do                                        #daemon函数本身可以指定多个选项,例如 --check ,--check=

  case$1in

    '')   echo$"$0:

Usage:

daemon[+/-nicelevel]{program}"    #也可以指定nice值

           return1;;

    --check)

    base=$2

    gotbase="yes"

    shift2

    ;;

    --check=?

*)

       base=${1#--check=}

    gotbase="yes"

    shift

    ;;

    --user)                                                                        #也可以指定要以什么用户身份运行(--user,--user=

    user=$2

    shift2

    ;;

    --user=?

*)

           user=${1#--user=}

    shift

    ;;

    --force)

       force="force"                                                            # --force表示强制运行

    shift

    ;;

    [-+][0-9]*)

       nice="nice-n$1"                                                        #如果daemon的第一个参数是数字,则认为是nice值

           shift

    ;;

    *)    echo$"$0:

Usage:

daemon[+/-nicelevel]{program}"

           return1;;

  esac

 done

 

       #Savebasename.                                                        # basename就是从服务器的二进制程序的fullpath中取出最后的部分

       [-z"$gotbase"]&&base=${1##*/}                                        

 

       #Seeifit'salreadyrunning.Look*only*atthepidfile.    #检查该服务是否已经在运行。

不过daemon函数只查看pid文件而已

 if[-f/var/run/${base}.pid];then                                         #如果/var/run下存在该服务的pid文件,则

  locallinep

  readline

注意pid文件可能有多行,且不一定都是数字

  forpin$line;do                                                                    # 对于line变量的每个word 进行检查

   [-z"${p//[0-9]/}"-a-d"/proc/$p"]&&pid="$pid$p"                     #如果p全部是数字,且存在/proc/$p/目录,则认为该数字是一个pid,把它加入到pid变量

  done                                                                                       #到最后pid变量的值可能是有多个由空格分隔的数字组成

 fi

 

 [-n"${pid:

-}"-a-z"${force:

-}"]&&return                                  #如果pid变量最终为空,则force变量为空(不强制启动),则返回

 

 #makesureitdoesn'tcoredumpanywhereunlessrequested        #下面对该服务使用的资源作一些设置

 ulimit-S-c${DAEMON_COREFILE_LIMIT:

-0}>/dev/null2>&1          #ulimit是控制由该shell启动的进程能够使用的资源,-S是softcontrol的意思,-c是指最大的core   

                                                                                                # dump文件大小,如果DEAMON_COREFILE_LIMIT 为空,则默认为0

 

 #iftheysetNICELEVELin/etc/sysconfig/foo,honorit                #如果存在/etc/sysconfi/foo文件,且其中有NICELEVEL变量则用它代替  daemon 后面的那个nice值

 [-n"$NICELEVEL"]&&nice="nice-n$NICELEVEL"                        #注意,这里的nice赋值是用nice-n的格式,因为nice 本身可以启动命令,用这个格式较方便

 

 #Echodaemon                                                                         #如果BOOTUP的值为verbose,则打印一个服务名

       ["${BOOTUP:

-}"="verbose"-a-z"$LSB"]&&echo-n"$base"

 

 #Andstartitup.                                                                                        #下面是开始启动它了

 if[-z"$user"];then                                                                                  #如果user变量为空,则默认使用root启动它

   $niceinitlog$INITLOG_ARGS-c"$*"                                                                #执行nice-ninitlog-q-c"$*" 

 else        

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1