博客
关于我
shell(十)case的几个典型应用
阅读量:376 次
发布时间:2019-03-05

本文共 4032 字,大约阅读时间需要 13 分钟。

服务启动脚本编写实践

一、服务启动脚本的编写说明

本文将通过case语句,编写不同服务的启动脚本,并集成开机自启功能。以下是具体实现方法。


二、服务启动脚本的案例

1. Nginx服务启动脚本
#!/bin/bash
# 定义服务名称和脚本所在目录
SERVICENAME="nginx"
SCRIPTDIR="/usr/local/lnmp/nginx/sbin"
# 检查是否存在关键库文件
if [ -f /etc/init.d/functions ]; then
source /etc/init.d/functions
fi
# 定义进程判断文件
PIDFILE="/usr/local/lnmp/nginx/logs/nginx.pid"
# 定义功能模块
start_Nginx() {
if [ -f $PIDFILE ]; then
echo "Nginx is running."
else
echo "Nginx is starting."
$SCRIPTDIR/nginx > /dev/null
/bin/true
fi
}
stop_Nginx() {
if [ -f $PIDFILE ]; then
echo "Nginx is stopping."
$SCRIPTDIR/nginx -s stop > /dev/null
/bin/true
else
echo "Nginx is already stopped."
/bin/true
fi
}
restart_Nginx() {
if [ -f $PIDFILE ]; then
echo "Nginx is restarting."
$SCRIPTDIR/nginx -s reopen > /dev/null
/bin/true
else
echo "Failed to start Nginx."
/bin/false
fi
}
reload_Nginx() {
if [ -f $PIDFILE ]; then
echo "Nginx is reloading."
$SCRIPTDIR/nginx -s reload > /dev/null
/bin/true
else
echo "Failed to reload Nginx."
/bin/false
fi
}
# case语句实现命令解析
case $1 in
start)
start_Nginx
RETVAL=$?
;;
stop)
stop_Nginx
RETVAL=$?
;;
restart)
restart_Nginx
RETVAL=$?
;;
reload)
reload_Nginx
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
;;
esac
exit $RETVAL
2. MySQL服务启动脚本
#!/bin/bash
# 定义服务名称和脚本所在目录
SERVICENAME="mysql"
SCRIPTDIR="/usr/local/mysql/bin"
# 定义功能模块
start_Mysql() {
if [ -f $PIDFILE ]; then
echo "MySQL is running."
else
echo "MySQL is starting."
$SCRIPTDIR/mysql.server start > /dev/null
/bin/true
fi
}
stop_Mysql() {
if [ -f $PIDFILE ]; then
echo "MySQL is stopping."
$SCRIPTDIR/mysql.server stop > /dev/null
/bin/true
else
echo "MySQL is already stopped."
/bin/true
fi
}
restart_Mysql() {
if [ -f $PIDFILE ]; then
echo "MySQL is restarting."
$SCRIPTDIR/mysql.server restart > /dev/null
/bin/true
else
echo "Failed to start MySQL."
/bin/false
fi
}
# case语句实现命令解析
case $1 in
start)
start_Mysql
RETVAL=$?
;;
stop)
stop_Mysql
RETVAL=$?
;;
restart)
restart_Mysql
RETVAL=$?
;;
reload)
echo "MySQL does not support reload."
exit 1
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
3. rsync服务启动脚本
#!/bin/bash
# 定义服务名称和脚本所在目录
SERVICENAME="rsync"
SCRIPTDIR="/usr/bin"
# 定义功能模块
start_Rsync() {
echo "Rsync is starting."
$SCRIPTDIR/rsyncd --daemon > /dev/null
/bin/true
}
stop_Rsync() {
echo "Rsync is stopping."
$SCRIPTDIR/rsyncd --stop > /dev/null
/bin/true
}
# case语句实现命令解析
case $1 in
start)
start_Rsync
RETVAL=$?
;;
stop)
stop_Rsync
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL

三、服务自启动配置

  • Nginx服务自启动配置

    • 打开终端执行:
      chmod a+x /etc/init.d/nginx
    • 使用chkconfig添加服务:
      chkconfig --add nginx
      chkconfig --list nginx
    • 设置开机自启动:
      chkconfig nginx on
  • MySQL服务自启动配置

    • 打开终端执行:
      chmod a+x /etc/init.d/mysql
    • 使用chkconfig添加服务:
      chkconfig --add mysql
      chkconfig --list mysql
    • 设置开机自启动:
      chkconfig mysql on
  • Rsync服务自启动配置

    • 打开终端执行:
      chmod a+x /etc/init.d/rsync
    • 使用chkconfig添加服务:
      chkconfig --add rsync
      chkconfig --list rsync
    • 设置开机自启动:
      chkconfig rsync on

  • 四、运行级别管理

  • 运行级别文件结构

    • 每个服务需要在对应的运行级别文件中添加注释:
      chkconfig: 2345 32 62
      description: Nginx is a http server!
    • 检查服务状态:
      ll /etc/rc.d/rc3.d/ | grep nginx
  • 启动脚本优先级

    • 优先级越高的启动脚本,越靠前执行:
      ll /etc/rc.d/rc3.d/ | grep 32

  • 五、常用命令

  • Nginx服务管理

    • 查看服务状态:
      chkconfig --list nginx
    • 禁用自启动:
      chkconfig nginx off
  • MySQL服务管理

    • 删除服务:
      chkconfig --del mysql
  • Rsync服务管理

    • 启用服务:
      chkconfig rsync on

  • 通过以上方法,可以轻松编写不同服务的启动关闭脚本,并实现开机自启动功能。

    转载地址:http://lcwwz.baihongyu.com/

    你可能感兴趣的文章