網上說了開機自啟有許多種方法:
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

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