linux 服务 (1)

旧式 服务管理 service

        service network status

服务管理工作机制:

        通过脚本工具执行追踪工作流程

        which service

                /usr/sbin/service

        sh +x service network status

        通过阅读脚本文件 /usr/sbin/service,脚本会先尝试在 /etc/init.d/找服务,若存在就执行,不存在就尝试通过 systemctl 执行服务。

[parallels@localhost ~]$ cat /usr/sbin/service 
#!/bin/sh

. /etc/init.d/functions

VERSION="$(basename $0) ver. 1.1"
USAGE="Usage: $(basename $0) < option > | --status-all | \
[ service_name [ command | --full-restart ] ]"
SERVICEDIR="/etc/init.d"
ACTIONDIR="/usr/libexec/initscripts/legacy-actions"
SERVICE=
ACTION=
OPTIONS=

if [ $# -eq 0 ]; then
   echo "${USAGE}" >&2
   exit 1
fi

cd /
while [ $# -gt 0 ]; do
  case "${1}" in
    --help | -h | --h* )
       echo "${USAGE}" >&2
       exit 0
       ;;
    --version | -V )
       echo "${VERSION}" >&2
       exit 0
       ;;
    --ignore-dependencies)
       export SYSTEMCTL_IGNORE_DEPENDENCIES=1
       shift
       ;;
    --skip-redirect)
       export SYSTEMCTL_SKIP_REDIRECT=1
       shift
       ;;
    *)
       if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
          cd ${SERVICEDIR}
          for SERVICE in * ; do
            case "${SERVICE}" in
              functions | halt | killall | single| linuxconf| kudzu)
                  ;;
              *)
                if ! is_ignored_file "${SERVICE}" \
		    && [ -x "${SERVICEDIR}/${SERVICE}" ]; then
                  env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" status
                fi
                ;;
            esac
          done
          exit 0
       elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then
          SERVICE="${1}"
          if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
            env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" stop
            env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" start
            exit $?
          fi
       elif [ -z "${SERVICE}" ]; then
         SERVICE="${1}"
       elif [ -z "${ACTION}" ]; then
         ACTION="${1}"
       else
         OPTIONS="${OPTIONS} ${1}"
       fi
       shift
       ;;
   esac
done

if [ -f "${SERVICEDIR}/${SERVICE}" ]; then
   # LSB daemons that dies abnormally in systemd looks alive in systemd's eyes due to RemainAfterExit=yes
   # lets reap them before next start
   if [ "${ACTION}" = "start" ] && \
   systemctl show -p ActiveState ${SERVICE}.service | grep -q '=active$' && \
   systemctl show -p SubState ${SERVICE}.service | grep -q '=exited$' ; then
       /bin/systemctl stop ${SERVICE}.service
   fi
   env -i PATH="$PATH" TERM="$TERM" SYSTEMCTL_IGNORE_DEPENDENCIES=${SYSTEMCTL_IGNORE_DEPENDENCIES} SYSTEMCTL_SKIP_REDIRECT=${SYSTEMCTL_SKIP_REDIRECT} "${SERVICEDIR}/${SERVICE}" ${ACTION} ${OPTIONS}
elif [ -x "${ACTIONDIR}/${SERVICE}/${ACTION}" -a -n "${ACTION}" ]; then
   env -i PATH="$PATH" TERM="$TERM" SYSTEMCTL_IGNORE_DEPENDENCIES=${SYSTEMCTL_IGNORE_DEPENDENCIES} SYSTEMCTL_SKIP_REDIRECT=${SYSTEMCTL_SKIP_REDIRECT} "${ACTIONDIR}/${SERVICE}/${ACTION}" ${OPTIONS}
elif `echo $ACTION | egrep -qw "start|stop|restart|try-restart|reload|force-reload|status|condrestart"` ; then
   SERVICE_MANGLED=$(/usr/bin/systemd-escape --mangle ${SERVICE})
   echo $"Redirecting to /bin/systemctl ${ACTION}${OPTIONS:+ }${OPTIONS} ${SERVICE_MANGLED}" >&2
   exec /bin/systemctl ${ACTION} ${OPTIONS} ${SERVICE_MANGLED}
else
   echo $"The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl." >&2
   exit 2
fi

编写测试服务程序:

        

[parallels@localhost ~]$ cat /etc/init.d/null_test 
#!/bin/bash

echo "$0 is execute"

case "${1}" in
	status)
		echo "$0 $1" "status"
		;;
	start)
		echo "$0 $1" "start"
		;;
	stop)
		echo "$0 $1" "stop"
		;;
	restart)
		echo "$0 $1" "restart"
		;;
	*)
		echo "unsupported option"
		;;
esac

echo "$0 finished"

测试null_test服务是否能通过service 管理:

[root@localhost init.d]# 
[root@localhost init.d]# service null_test status
/etc/init.d/null_test is execute
/etc/init.d/null_test status status
/etc/init.d/null_test finished
[root@localhost init.d]# 
[root@localhost init.d]# service null_test state
/etc/init.d/null_test is execute
unsupported option
/etc/init.d/null_test finished

        测试ok。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值