zoukankan      html  css  js  c++  java
  • CentOS7添加开机启动服务或脚本

    方法一(rc.local)

        改方式配置自动启动最为简单,只需要修改rc.local文件

    1. 由于在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权

      chmod +x /etc/rc.d/rc.local
    2. 赋予脚本可执行权限
      假设/usr/local/app/start.sh是你的脚本路径,给予执行权限

      chmod +x /usr/local/app/start.sh
    3. 打开/etc/rc.d/rc.local文件,在末尾增加如下内容

      /usr/local/app/start.sh
    4. 或者在rc.local加启动语句

         末尾添加 #su - root -c 'nohup java -Dloader.path="/usr/local/app/lib/"  -jar /usr/local/app/YunXiuAppMarketObj-0.0.1-SNAPSHOT-exec.jar>/usr/local/app/run.log 2>&1 &'(启动语句)

       示例 写入多个sh文件,切换root用户执行

           #!/bin/bash

           echo "su - root -c '/data/app/starteureka-1.sh & /data/app/startsystem-2.sh & /data/app/startleader-3.sh'" >> /etc/rc.d/rc.local

    方法二(chkconfig)

    说明

    /etc/init.d/etc/rc.d/init.d的软链接,可以通过ll命令查看。当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的运行级别确定不同的启动级别。

    教程1 chkconfig

    1. 将脚本移动到/etc/rc.d/init.d目录下

      mv  /usr/local/app/start.sh /etc/rc.d/init.d
    2. 增加脚本的可执行权限

      chmod +x  /usr/local/app/start.sh
    3. 添加脚本到开机自动启动项目中

      cd /etc/rc.d/init.d
      chkconfig --add start.sh 添加为系统服务
      chkconfig start.sh on 开机自启动 service start.sh start 启动服务

    教程2 通过service服务启动

    1)在/etc/inint.d目录下创建服务软连接

    #这里jar包的路径为绝对路径

    ln -s /home/service/test.jar /etc/inint.d/test

    2) 手动启动应用测试是否添加成功

     service test start

    3)  添加服务开机启动

    chkconfig --add test

    4)验证配置是否成功

    #查看服务是否已经添加到了列表中

    chkconfig --list

    #重启服务

    reboot

    注:以上配置是在通过spring-boot 搭建项目打成jar包后可以通过jar包名称直接运行,如:通过./test.jar直接启动项目。配置方式为在pom文件中添加如下配置

     

    <plugin>    

    <groupId>org.springframework.boot</groupId>    

    <artifactId>spring-boot-maven-plugin</artifactId>    

    <configuration>        

    <executable>true</executable>    

    </configuration>

    </plugin>

    关于chkconfig及liunx运行级别

    • chkconfig启动脚本规范
      在脚本开头加入下面内容:

      #!/bin/bash
      # chkconfig:   2345 90 10
      # description:  myservice

      说明:chkonfig后面是启动级别和优先级,description后面是服务描述。如上面脚本意思是,服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,停止的优先级是10。
      优先级范围是0-100,数字越大,优先级越低。

      注意:不添加以上内容的话添加启动项时会提示service myservice does not support chkconfig。

    • Linux启动优先级
      运行级别就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。这些级别在/etc/inittab文件里指定。这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d 目录下的文件。
      不同的运行级定义如下:(可以参考Linux里面的/etc/inittab)

      # 缺省的运行级,RHS用到的级别如下:
      0:关机
      1:单用户模式
      2:无网络支持的多用户模式
      3:有网络支持的多用户模式
      4:保留,未使用
      5:有网络支持有X-Window支持的多用户模式
      6:重新引导系统,即重启
      
      # 对各个运行级的详细解释:
      0 为停机,机器关闭。
      1 为单用户模式,就像Win9x下的安全模式类似。
      2  为多用户模式,但是没有NFS支持。 
      3  为完整的多用户模式,是标准的运行级。
      4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本 电脑的电池用尽时,可以切换到这个模式来做一些设置。
      5  就是X11,进到X Window系统了。
      6  为重启,运行init 6机器就会重启。

    方法三(systemd)

    可以通过systemd添加自定义服务启动,具体步骤这里不再赘述。

    通过systemctl服务启动

    该方式将java应用的启动脚本托管给systemctl服务,通过systemctl的一系列命令配置应用的开机启动。

    1)进入到系统的/usr/lib/systemd/system目录下 

    cd /usr/lib/systemd/system

    2)添加.service文件

    vim test.service

    [Unit]

    #服务描述

    Description=test

    #当前服务在某个服务启动之后启动

    After=syslog.target network.target

    [Service]#systemctl进程运行的类型,有多种类型,默认为simple通过主进程启动,forking后台启动也就是systemctl主进程启动后会再生成一个子进程执行当前服务

    Type=forking

    #存放应用进程号的文件路径为绝对路径

    PIDFile=/home/service/pid

    #配置应用启动命令,应用的启动脚本路径必须为绝对路径

    ExecStart=/home/service/startup.sh start

    #配置应用的重启命令

    ExecReload=/home/service/startup.sh restart

    #配置应用的停止命令

    ExecStop=/home/digital/service/startup.sh stop

    #表示给应用分配独立的临时空间

    PrivateTmp=true

    #指定启动应用的用户

    User=test

    #指定用户的用户组

    Group=test    

    #等待应用的启动时间,单位为秒,0表示禁用,如果在配置的时间内收到启动完成的信号,服务被认为执行失败然后自动退出

    TimeoutStartSec=0

    # 杀掉指定进程,none表示没有进程会被杀掉,只执行stop操作

    KillMode=none

    [Install]

    WantedBy=multi-user.target

     在配置文件中添加了TimeoutStartSec和KillMode两个参数主要是为了防止java应用程序通过systemctl启动成功后进程会被自动干掉的问题,因为我在配置的过程中碰到一个问题就是在java应用程序已经成功启动一段时间后会进程会被莫名奇妙的干掉,尝试了多种方式,比如在配置文件中加上Restart=always参数发现应用会被不停地杀掉重启不能解决根本问题,最后发现配置文件中添加

    TimeoutStartSec=0和KillMode=none后问题解决。

    3)执行reload命令,使配置生效

    sudo systemctl daemon-reload

    4)  将应用的执行命令设置为开机自动启动

    # 设置开机启动

    sudo systemctl enabled test.service

    # 设置开机不启动

    sudo systemctl disabled test.service

    5)手动启动应用程序

    sudo systemctl start test.service

     如果启动异常可通过systemctl status查看应用启动的状态

    sudo systemctl status test.service

    纵有白头俱老意,奈何缘浅路芊芊.
  • 相关阅读:
    sfs2x 连接 mongodb
    java websocket
    webstorm 4.0 注册码
    解决 sfs2 admin tool 找不到扩展
    window 注册表五大类
    opengl 学习第二日
    java google Protobuf
    扩展 java sencha touch PhonegapPlugin
    sencha touch2 kryonet socket phonegap 通信 作者:围城
    sencha touch2 layout 笔记
  • 原文地址:https://www.cnblogs.com/hanby/p/14428387.html
Copyright © 2011-2022 走看看