ubuntu16.04設置開機自啟服務


 

網上說了開機自啟有許多種方法:

1.最簡單的是:在/etc/rc.local的exit 0前面加上你啟動服務的腳本文件路徑

      注:這個腳本文件應寫絕對路徑

2.網上:修改rc.local開頭的#/bin/sh -e  修改為#/bin/bash   ...

3.網上:加上sleep時間,讓其他程序先加載  ...

4.網上:cd /etc/systemd/system/,創建xx.service方法啟動  ...

5.網上:查看SHELL,將/bin/sh (輸出dash) 改為/bin/sh (輸出bash) ...

....  啟動的方法有很多,可能對你們來說會有用,我選擇最簡單的將服務啟動腳本放在了rc.local中啟動。

(先說一下我的flask服務內容:我的flask內容是需要加載模型文件做出預測,啟動服務需要初始化CUDA,否則會報錯,從而導致服務起不來,這也是一直困擾我很多天的關鍵問題所在)

 

我將我的啟動服務腳本文件放在了rc.loca中:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.


export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64
export PATH=$PATH:/usr/local/cuda-10.0/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64



sleep 7
cd /home/tf-serving/flaskFiles/modelFlask
/home/tf-serving/flaskFiles/modelFlask/run.sh

exit 0

 

如果說你們正常的服務不需要初始化什么文件或者其他的東西,就直接將啟動服務的腳本文件放在exit 0 上面,開機就自動啟動了,但是我這個服務需要初始化CUDA的環境變量;

其實這4行初始化CUDA的環境變量在/etc/profile全局變量文件中寫過了,之所以又在啟動文件中在寫一遍,原因是:查看了一下rc.local文件的啟動級別數字較小,說明服務器開機的時候較先執行;

由於較先執行,所以還沒來得及執行/etc/profile下的環境,就先執行rc.local了,所以會報錯(報錯是因為加載tensorflow-gpu時,沒有找到CUDA,會報版本錯誤的問題);

然后找錯誤原因,將打印信息重定向到一個日志文件中:(這三行寫在rc.local文件中,主要是導出test.log,查看錯誤以及沒有執行的信息~)

sleep 7

cd /home/tf-serving/flaskFiles/modelFlask

/home/tf-serving/.pyenv/versions/env-3.6.4/bin/gunicorn -b 127.0.0.1:9999 app:app > /home/test.log 2>&1

 

 

總的來說還是因為服務器開機執行的優先級問題!!這個問題困擾了我好幾天,還好總算是解決了,謝天謝地。

 


免責聲明!

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



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