网上说了开机自启有许多种方法:

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

总的来说还是因为服务器开机执行的优先级问题!!这个问题困扰了我好几天,还好总算是解决了,谢天谢地。

ubuntu16.04设置开机自启服务的更多相关文章

  1. ubuntu18.04设置开机自启Django

    设置开机自启: rc-local.server [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.l ...

  2. 如何管理linux开机自启服务

    如何管理linux开机自启服务? 自启动服务非常重要,例如 (1)需要手动添加希望自启的服务,如安装svn后没有自动添加,就需要我们手动加入(2)安装某些程序后,自动加到自启动了,但我们不需要,需要手 ...

  3. Linux(CentOS6.5)下Nginx注册系统服务(启动、停止、重启、重载等)&设置开机自启

    本文地址http://comexchan.cnblogs.com/ ,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢! 完成了Nginx的编译安装后,仅仅是能支持Nginx最基本的功能, ...

  4. ubuntu-18.04 设置开机启动脚本

    ubuntu-18.04 设置开机启动脚本 参阅下列链接 https://askubuntu.com/questions/886620/how-can-i-execute-command-on-sta ...

  5. redis设置开机自启

    开机自启动redis(其他服务类似) centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvini ...

  6. Centos7安装elasticsearch6.3及ik分词器,设置开机自启

    参考Elasticsearch 在CentOs7 环境中开机启动 建议虚拟机的内存大小为4G 1. 新建一个用户john 出于安全考虑,elasticsearch默认不允许以root账号运行. 创建用 ...

  7. TX2开发板Ubuntu16.04设置静态IP

    TX2开发板Ubuntu16.04设置静态IP  https://www.cnblogs.com/qilai/p/11285445.html 首先打开一个Terminal输入 ifconfig 查看自 ...

  8. Centos 7 redis、tomcat、Spring Boot添加开机自启服务

    一.redis添加开机自启 1.添加服务配置文件 [root@test system]# vim /etc/systemd/system/redis-server.service 2.服务配置文件内容 ...

  9. centos7安装docker并设置开机自启以及常用命令

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

随机推荐

  1. IPC之——消息队列

    消息队列作用: 可以用于两个没有联系的进程间通信,创建一个消息队列类似于打开了一个文件,两个不同的进程都可以进行操作 消息队列之函数介绍: 头文件:<sys/type.h> <sys ...

  2. 区别 new function(){} 和 function(){}()

    只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实 ...

  3. COMET探索系列一【COMET实践笔记】

    这几天在给公司的一个点对点聊天系统升级,之前只是使用简单的ajax轮询方式实现,每5秒钟取一次数据,延时太长,用户体验不是很好,因此打算采用服务器推送技术,故此整理了以下文档,将自己找到的一些资料及心 ...

  4. C#结构体的使用

    C#结构体的使用 结构体:相当于是我们自己定义的一种复杂的类型. 常见简单类型:int... double float bool char string 常见复杂类型:DateTime 数组类型 生活 ...

  5. Qt 使用自带的OpenGL模块开发程序

    QT中使用opengl .pro文件中添加 QT += opengl 1.使用指定版本的OpenGL如下使用opengl4.5调用方法,使用指定版本的接口,必须设备图形显示设备支持对应OpenGL版本 ...

  6. Java捕获并处理线程失败抛出的异常

    使用 UncaughtExceptionHandler 示例代码如下: Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExc ...

  7. 微信发送朋友圈URL JSAPI事件demo

    <script> var imgUrl = 'http://m.ximiyu.com/content/images/thumbs/0000126_540.jpeg'; var lineLi ...

  8. signals function|KNN|SVM|average linkage|Complete linkage|single linkage

    生物医疗大数据 存在系统误差使得估计量有偏,如下图红色和蓝色图形,存在随机误差使得估计量并不是同一个值,如图中除去期望之外的曲线值,为了控制随机抽样造成的误差,可以使用p-value决定是否服从假设检 ...

  9. Java实现Luhm算法--银行卡号合法性校验

    银行卡是由"发卡行标识代码 + 自定义 + 校验码 "等部分组成的. 银联标准卡与以往发行的银行卡最直接的区别就是其卡号前6位数字的不同.   银行卡卡号的前6位是用来表示发卡银行 ...

  10. ContentType明细对照表(文件类型相关的设置)

    文件扩展名 Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*( 二进制流,不知道下载文件类型) application/octet-st ...