网上说了开机自启有许多种方法:
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
总的来说还是因为服务器开机执行的优先级问题!!这个问题困扰了我好几天,还好总算是解决了,谢天谢地。