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列要運行的命令

也可以將*號換成具體的日期時分 固定時間啟動該腳本。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM