CentOS 下自定义开机启动服务和 chkconfig 使用总结

梨子2016-11-6
本文最后更新于 1101 天前(2016-11-6),其中的信息可能已经有所发展或者不再适用于现阶段。
本文全长 622 字,全部读完大约需要 2 分钟。

一、

对于支持 chkconfig 的程序,只要把它扔到 /etc/init.d/ 目录下,然后添加服务,然后用让它开机自动启动就可以了。

比如笔者今天试图让服务器开机自动运行 XAMPP

ln -s /opt/lampp/lampp /etc/init.d/lampp  
chkconfig --add lampp  
chkconfig lampp on

二、

如果我们想自己写一些脚本,也可以用下面的方法把它注册为服务

  1. 主程序 main 里,在开头加入语句。

    daemon(0,0);
  2. 编写service脚本 /etc/init.d/myservice

    #!/bin/bash
    # chkconfig: 2345 10 90 
    # Description:  This shell script takes care of starting and stopping myservice
    # XD created on Marcy. 26th, 2015
    #
    # Source function library
    . /etc/init.d/functions
    
    #the service name
    SNAME=myservice
    
    
    
    #程序所在路径
    
    WORKPATH=/home/root/myservice
    
    #the full path and name of the daemon program
    #Warning: The name of executable file must be identical with service name
    PROG="$WORKPATH/$SNAME"
    RETVAL=0
    
    # start function
    start() {
        #check the iccserver status first
        if [ -f /var/lock/subsys/$SNAME ]
        then
            echo "$SNAME is already started!"
            exit 0;
        else
            echo -n $"Starting $SNAME... "
        daemon $PROG  
            RETVAL=$?  
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SNAME
        return $RETVAL  
        fi
    }
    
    #stop function
    stop() {
        echo "Stopping $SNAME ..."
        killproc $SNAME
        rm -rf /var/lock/subsys/$SNAME
    }
    
    case "$1" in
    start)
      start
      ;;
    stop)
      stop
      ;;
    reload|restart)
      stop
      start
      ;;
    status)
      status $SNAME
      RETVAL=$?
      ;;
    *)
      echo $"Usage: $0 {start|stop|restart|status}"
      exit 1
    esac
    
    exit $RETVAL
  3. 提升脚本文件权限

      chmod 755 /etc/init.d/myservice
  4. 最后将service 加入到服务和自启动列表;

    chkconfig --add myservice
    chkconfig myservice on

    这里如果 #!/bin/bash 后没有下面这两句的话,就会出现 service myservice does not support chkconfig 问题

    chkconfig: 2345 10 90 
    description: myservice ....

    其中 2345 是默认启动级别,级别有 0-6 共 7 个级别。

    等级 0 表示:表示关机

    等级 1 表示:单用户模式

    等级 2 表示:无网络连接的多用户命令行模式

    等级 3 表示:有网络连接的多用户命令行模式

    等级 4 表示:不可用

    等级 5 表示:带图形界面的多用户模式

    等级 6 表示:重新启动

    10 是启动优先级,90 是停止优先级,优先级范围是 0-100,数字越大,优先级越低。

  5. 如果主程序有其他依赖库文件,将依赖库到路径加入到 /etc/ld.so.conf 文件里;

三、讲一下今天遇到的问题

在配置完了 iptables 的配置以后,发现开机启动时不能正确加载配置,systemctl restart iptables 之后就正常了。查了一下发现 CentOS7 还有一个叫 firewalld 的东西,只需

systemctl disable firewalld

iptables 就能正常开机加载配置了

参考资料:http://blog.163.com/xd8171@126/blog/static/6208104320152265474366/

除特殊说明以外,本网站文章采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。