谷动谷力

 找回密码
 立即注册
查看: 3334|回复: 7
收起左侧

基于shell中的start函数分析

[复制链接]
发表于 2018-10-26 00:18:44 | 显示全部楼层 |阅读模式
本帖最后由 sunsili 于 2024-1-27 09:49 编辑

基于shell中的start函数分析


以httpd的服务管理脚本/etc/init.d/httpd为例。
  1. start() {
  2.      echo -n [        DISCUZ_CODE_0        ]quot;Starting $prog: "
  3.      LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
  4.      RETVAL=$?
  5.      echo
  6.      [ $RETVAL = 0 ] && touch ${lockfile}
  7.      return $RETVAL
  8. }
复制代码

函数首先输出"Starting $prog"信息,再使用daemon启动"$httpd"程序。

在daemon语句中,"--pidfile"是daemon的参数,该参数为daemon检测pid文件是否存在,"$httpd"进程是否已在运行。注意,这个"--pidfile"是写在"$httpd"前面的,表示这是daemon的参数,而非"$httpd"的启动参数。

检测完成后,启动程序。程序的启动命令从"$httpd"参数开始,"$OPTIONS"是"$httpd"的启动选项。一般出现"$OPTIONS"这个字眼,很可能加载了/etc/sysconfig目录下的同名文件,目的是提供程序启动参数。

如果启动成功,则会daemon函数会调用functions中的success函数显示"[ OK ]",否则会显示"[ FAILED ]"。

最后,如果启动成功,则会创建该进程的锁文件"$lockfile"。锁文件一般都在/var/lock/subsys目录下。

很多时候,管理的进程也有"--pidfile"类似的选项。例如下面的启动语句:

daemon --pidfile $pidfile $processname --pidfile=$pidfile
两个"--pidfile"选项,但他们的作用是不一样的。第一个"--pidfile"是daemon函数的参数,以便daemon能够检测该文件中的pid进程是否已在运行。第二个"--pidfile"是"$processname"的启动参数,启动时会创建此文件作为pid文件。

再看一个不使用daemon函数管理进程启动动作的示例。以下是/etc/init.d/sshd中的start函数内容。
  1. start()
  2. {
  3.          [ -x $SSHD ] || exit 5
  4.          [ -f /etc/ssh/sshd_config ] || exit 6
  5.          # Create keys if necessary
  6.          if [ "x${AUTOCREATE_SERVER_KEYS}" != xNO ]; then
  7.                  do_rsa_keygen
  8.                  if [ "x${AUTOCREATE_SERVER_KEYS}" != xRSAONLY ]; then
  9.                          do_rsa1_keygen
  10.                          do_dsa_keygen
  11.                  fi
  12.          fi

  13.          echo -n [        DISCUZ_CODE_1        ]quot;Starting $prog: "
  14.          $SSHD $OPTIONS && success || failure
  15.          RETVAL=$?
  16.          [ $RETVAL -eq 0 ] && touch $lockfile
  17.          echo
  18.          return $RETVAL
  19. }
复制代码

前面多了一大段,这和服务启动脚本的框架无关,是程序自身要求的,但作用很简单。无非就是判断下程序是否可执行,配置文件是否存在,是否要创建服务端主机验证阶段的密钥对,也就是/etc/ssh/ssh_host_{rsa,dsa}_key等几个文件。

再下面才是服务启动脚本中的通用逻辑部分。输出一段信息,然后启动程序,创建锁文件。但这里没有使用daemon函数管理,所以这里配合了success和failure函数以便人性化显示"[ OK ]"或"[ FAILED ]"。

转自:基于shell中的start函数分析
http://bbs.cirmall.com/thread-52157-1-1.html
(出处: 电路城)
+10

本帖被以下淘专辑推荐:

  • · Shell|主题: 28, 订阅: 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-7-19 04:09 , Processed in 0.073883 second(s), 37 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表