linux shell 之尝试编写 企业级 启动脚本

企业Shell面试题10:开发企业级MySQL启动脚本

说明:

MySQL启动命令为:


1

/bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2>&1 >/dev/null &

停止命令逻辑脚本为:


1

2

3

4

5

6

mysqld_pid=`cat "$mysqld_pid_file_path"`

if (kill -0 $mysqld_pid 2>/dev/null)

  then

    kill $mysqld_pid

    sleep 2

fi

请完成MySQL启动脚本的编写,并实现可以使用chkconfig配置开机自启动。

要求:用函数,case语句、if语句等实现。

解答:此题的技巧适合绝大多数启动脚本,例如:rsync,nginx等,仅以MySQL为例介绍思路。

简单、易用、高效、专业


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

#!/bin/bash

# chkconfig: 2345 64 36

# description: MySQL startup

#Author:oldboy

#Blog:http://oldboy.blog.51cto.com

#Time:2017-07-07 09:24:34

#Name:mysqld

#Version:V1.0

#Description:This is a test script.

[ -f /etc/init.d/functions ] && source /etc/init.d/functions

bindir="/application/mysql/bin"

datadir="/application/mysql/data"

mysqld_pid_file_path="/application/mysql/`hostname`.pid"

PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin" #此步对开机启动及定时启动及其关键。

export PATH

return_value=0

# Lock directory.

lockdir=‘/var/lock/subsys‘

lock_file_path="$lockdir/mysql"

log_success_msg(){ 

    echo " SUCCESS! [email protected]" # 注意函数的缩进,下同,也是专业的表现,可放到functions里。

}   

log_failure_msg(){     

    echo " ERROR! [email protected]"

}  

# Start Func

start(){

    # Start daemon

    echo "Starting MySQL"

    if test -x $bindir/mysqld_safe  # 启动文件是否可执行。

    then

        $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path"  >/dev/null &

        return_value=$? # 是否处理好返回值是区别脚本是否专业规范的关键。

        sleep 2

        # Make lock for CentOS

        if test -w "$lockdir"   # 锁目录是否可写。

        then

            touch "$lock_file_path"  # 创建锁文件。

        fi

        exit $return_value

    else

        log_failure_msg "Couldn‘t find MySQL server ($bindir/mysqld_safe)"

    fi

}

# Stop Func

stop(){

    if test -s "$mysqld_pid_file_path" # 是否PID文件存在并大小大于0。

    then

        mysqld_pid=`cat "$mysqld_pid_file_path"`

        if (kill -0 $mysqld_pid 2>/dev/null# 检查PID对应的进程是否存在。

        then

            echo "Shutting down MySQL"

            kill $mysqld_pid  # 不能带-9,否则后果自负。

            return_value=$?

            sleep 2

        else

            log_failure_msg "MySQL server process #$mysqld_pid is not running!"

            rm -f "$mysqld_pid_file_path"

        fi

        # Delete lock for Oldboy‘s CentOS

        if test -f "$lock_file_path"

        then

            rm -f "$lock_file_path"

        fi

        exit $return_value

    else

        log_failure_msg "MySQL server PID file could not be found!"

    fi

}

case "$1" in

    start)            

        start

        ;;

    stop)

        stop

        ;;

    restart)

        if $0 stop; then

           $0 start

        else

           log_failure_msg "Failed to stop running server, so refusing to try to start."

           exit 1

        fi

        ;;

    *)

        echo "Usage: $0  {start|stop|restart}"

        exit 1

esac

exit $return_value #是否处理好返回值是区别脚本是否专业规范的关键。

保留原著出处:http://oldboy.blog.51cto.com/2561410/1945183

感谢作者分享、

时间: 2024-10-25 09:22:51

linux shell 之尝试编写 企业级 启动脚本的相关文章

Python中的类方法及属性总结举例,编写memcached启动脚本举例

1.类的属性总结类属性,也是公有属性, 类的私有属性, 对象的共有属性, 对象的私有属性, 内置属性, 函数的局部变量, 全局变量, #/usr/bin/env python # -*- coding:utf-8 -*- class MyClass(object): var1 = '类属性,类的公有属性 var1' __var2 = '类的私有属性 __var2' def func1(self): self.var3 = '对象的公有属性 var3' self.__var4 = '对象的私有属性

nginx 源码编译安装并编写服务启动脚本

1. 使用xshell将nginx源码包上传到server 2. 安装依赖的软件包工具 zlib-devel?? pcre-devel?? gcc? gcc-c++ yum -y install zlib-devel pcere-devel gcc gcc-c++ 验证一下: 3. 指定nginx的运行用户 (创建nginx用户不使其登录系统.-M不创建宿主目录) [[email protected] ~]# useradd -s /sbin/nologin -M nginx 4. 编译安装ng

shell编写 ngin启动脚本

#!/bin/bash [ -f /etc/init.d/functions ] && . /etc/init.d/functions pid=/application/nginx/logs/nginx.pid nginx=/application/nginx/sbin/nginx RED_COLOR='\E[1;31m' GREEN_COLOR='\E[1;32m' YELLOW_COLOR='\E[1;33m' BLUE_COLOR='\E[1;34m' PINK='\E[1;35m'

不错的linux下通用的java程序启动脚本(转载)

转自:http://www.cnblogs.com/langtianya/p/4164151.html 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用来做起动脚本了. 并且除了能起动.还支持关闭.重启.查看是否正在运行的功能. 原文地址:http://www.tudaxia.com/archives/10 start函数中,nohup部分其实也

不错的linux下通用的java程序启动脚本

虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用来做起动脚本了. 并且除了能起动.还支持关闭.重启.查看是否正在运行的功能. 原文地址:http://www.tudaxia.com/archives/10 start函数中,nohup部分其实也可以提出来放入一个配置变量中.这里没有修改直接贴上作者的原文 #!/bin/sh #该脚本为Linux下

linux下Oracle自启动配置及启动脚本 12c 测试通过

参考:http://www.jb51.net/article/32214.htm 1. Oracle的一些基本参数[[email protected] ~]$ echo $ORACLE_SIDadela[[email protected] ~]$ echo $ORACLE_HOME /u01/app/oracle/product/12.1.0/db_1[[email protected] ~]$ echo $ORACLE_BASE /u01/app/oracle 2. 修改/etc/oratab

bash shell学习 01(配置和启动脚本)

bash是 Bourne Again Shell简称 ,从unix系统的sh发展而来 查看当前shellecho $SHELL查看系统支持的shellcat /etc/shells cd /binls -la *sh 一. bash shell的配置变量可分为自定义变量和环境变量他们作用范围不同set 可以查看所有变量set|more 查看 enter一行一行查看set|less enter换行 pagedown换页 q退出 env只能查看环境变量 bash shell的设置方式1.通过自定义变

02.利用Shell开发Redis多实例启动脚本

一.Redis部署情况 ## 软件部署情况 [[email protected] ~]# ls -ld /data/apps/redis <==目录本身及以下所有文件的属主/组为redis lrwxrwxrwx 1 root root 24 Oct 26 11:33 /data/apps/redis -> /data/apps/redis-4.0.14/ ## 实例部署情况 [[email protected] ~]# tree /data/redis/ <==目录本身及以下所有文件的属

Linux shell - `dirname $0` 定位到运行脚本的相对位置

例1. 在/home/admin/test/下新建test.sh内容如下: cd `dirname $0` echo `pwd` 然后返回到/home/admin/执行 sh test/test.sh 运行结果: /home/admin/test 这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置.这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行. dirname 用于取指定路径所在的目录 $0 表示当前运