zoukankan      html  css  js  c++  java
  • ubuntu16.04 程序开机自启动设置及启动优化

    使用过程中,为了方便使用,有一些程序需要开机时自启动应用,下面将介绍一下ubuntu16.04下程序的开机自启动设置方法。

    1  建立一个可执行程序的运行脚本如 keepalive.sh。内部写入要执行的程序等逻辑脚本, 内容如:

    #!/bin/bash
    # -*- coding: utf-8 -*-
    cmd=$(pgrep -c recogFaceC)

    export ACE_ROOT=/home/ubuntu/system-setup/wwei/ACE_wrappers
    export THID_ONLY_DEEP_FEATURE=1
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ACE_ROOT/ace
    export GOPATH=/home/ubuntu/go

    if [[ $cmd -lt 1 ]]
    then
        nohup /home/ubuntu/system-setup/baic/baicmotor/connection/recogFaceConnection > /tmp/serial.log 2>&1 &
    fi

    cmdface=$(pgrep -c TFaceRecogS)

    if [[ $cmdface -lt 1 ]]
    then
        nohup /home/ubuntu/system-setup/baic/0411/bin/TFaceRecogService > /tmp/face.log 2>&1 &
    fi

    以上内容是分别启动了两个程序recogFaceConnection  TFaceRecogService 并在tmp下分别打印了两个日志serial.log face.log。 if [[ $cmd -lt 1 ]] 为启动个数小于1 去启动程序

    环境变量根据实际依赖的配置的环境变量复制粘贴到此处, 程序名称和运行路径根据实际情况修改。

    2 启动程序脚本写完后,需要将此添加到开机启动项里边,有以下两种方法:

    (一) 比较简单的方法

    在/etc/rc.local中添加
    如果不想将脚本粘来粘去,或创建链接什么的,
    则:
    step1. 先修改好脚本,使其所有模块都能在任意目录启动时正常执行;
    step2. 再在/etc/rc.local的末尾添加一行以绝对路径启动脚本的行;
    如:
    $ vim /etc/rc.local
    #!/bin/sh
    #
    # This script will be executed *after* all the other init scripts.
    # You can put your own initialization stuff in here if you don't
    # want to do the full Sys V style init stuff.

    touch /var/lock/subsys/local
    . /etc/rc.d/rc.tune
    /home/ubuntu/keepalive.sh

    保存并退出;
    再重启动测试下,则在其它的程序都启动完成后,将启动脚本;

    此方法程序启动较慢,需要系统其他启动完后最后启动该脚本。因为rc.local 为系统启动完成才执行的脚本。对启动时间没有特殊的要求可以采用此方法。

    (二)可设定启动优先级的高级自启动设置

    上边一方法介绍了rc.local中添加的方法,rc.local为系统及的脚本,可以参照此写自己脚本,并设置优先级。

    (1)将/etc/rc.local 复制一份如rc.hisign,将内容修改为自己的执行脚本。内容如下:

    #!/bin/sh -e

    /home/ubuntu/keepalive.sh &
    exit 0

    注意一定要加&符号。

    /etc/下面有这么几个目录值得注意:
    rcS.d rc0.d rc1.d ... rc6.d ,
    (0,1... 6 代表启动级别 0代表停止,1代表单用户模式,2-5代表多用户模式,6代表重启) 启动顺序从小到大。数字小的优先执行启动

    (它们的作用就相当于 redhat 下的 rc.d ,你可以把脚本放到 rcS.d,然后修改文件名,给它一个启动序号,如:S88rc.hisign.)

    最好的办法是将脚本放到相应的启动级别下面, 下面步骤为具体方法

    (2)进入/etc/init.d  下,将此下的rc.local 复制一份改为rc.hisign 修改内容将rc.local 替换为rc.hisign。  # Required-Start:  $all 的$all去掉。  rc.hisign内容如下:

    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          rc.hisign
    # Required-Start:    
    # Required-Stop:
    # Default-Start:     2 3 4 5
    # Default-Stop:
    # Short-Description: Run /etc/rc.hisign if it exist
    ### END INIT INFO


    PATH=/sbin:/usr/sbin:/bin:/usr/bin

    . /lib/init/vars.sh
    . /lib/lsb/init-functions

    do_start() {
        if [ -x /etc/rc.hisign ]; then
                [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.hisign)"
            /etc/rc.hisign
            ES=$?
            [ "$VERBOSE" != no ] && log_end_msg $ES
            return $ES
        fi
    }

    case "$1" in
        start)
        do_start
            ;;
        restart|reload|force-reload)
            echo "Error: argument '$1' not supported" >&2
            exit 3
            ;;
        stop|status)
            # No-op
            exit 0
            ;;
        *)
            echo "Usage: $0 start|stop" >&2
            exit 3
            ;;
    esac

    注意将  # Required-Start:  $all 的$all去掉。否则会在所有启动后在启动。

    或者将已经写好的rc.hisign 直接添加到/etc/init.d下 ,如果没有读写权限 sudo chmod x rc.hisign  设置权限。

    (3) /etc/init.d/下脚本rc.hisign创建完成后,

    可以选择执行 sudo runlevel 查看当前系统启动级别,结果为 N 5 。

    接下来 设定启动级别 
     sudo update-rc.d rc.hisign start 01 2 3 4 5 .
       01 为启动序号,
       2 3 4  5分别是系统的运行级别,可自己调整只写一个3等
       注意不要忘了结尾的句点。

    现在我们到 /etc/rc2.d 下,就多了一个 S01rc.hisign这样的符号链接。

    重起计算机,查看是否有效。

    至此开机自启动设置完成。

    (三) 附加信息
    当你需要移除这个符号连接时,方法有三种:
    1. 直接到 /etc/rc2.d 下删掉相应的链接,当然不是最好的方法
    2.  sudo  update-rc.d -f s10 remove //推荐做法 或者 sudo update-rc.d -f rc.hisign remove
    3. 如果 update-rc.d 命令你不熟悉,还可以试试看 rcconf 这个命令,也很方便。

    4 .update-rc.d rc.hisign defaults 将脚本添加到随机启动项

    5 .  update-rc.d rc.hisign defaults  80     指定服务启动的顺序,数字越小,启动顺序越靠前。

    6.  sudo sysv-rc-conf 命令去除一些非必要的开机启动项,没有sudo apt install sysv-rc-conf 进行安装

    3 .设置监控程序 , 以便当程序推出后可以自启动程序。

    用cron来实现这一功能。

    执行sudo crontab -e  最后一行添加  * * * * * /home/ubuntu/keepalive.sh &

    前边几个* 分别代表年月日时分信息,及每分执行检测一下该启动脚本,脚本keepalive.sh内如果程序退出了会重新启动,如果启动了 就不会在启动。

    *  *  *  *  *  command
    分 时 日 月 周 命令
    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令

    也可以将*号换成具体的日期时分 固定时间启动该脚本。

  • 相关阅读:
    几种php加速器比较
    细说firewalld和iptables
    Linux上iptables防火墙的基本应用教程
    mysql 字符串按照数字类型排序
    《设计模式之禅》之六大设计原则下篇
    《设计模式之禅》之六大设计原则中篇
    《设计模式之禅》之六大设计原则上篇
    git bash 乱码问题之解决方案
    nexus没有授权导致的错误
    Java之微信公众号开发
  • 原文地址:https://www.cnblogs.com/wenhuakulv1989/p/7239508.html
Copyright © 2011-2022 走看看