ubuntu18.04 python程序设定的开机自启方法及失败原因

16 篇文章 0 订阅
13 篇文章 0 订阅

问题总结

1、最关键的问题是找到程序没有自启的原因,网上也有很多关于自启失败的原因总结,但是找到自己的那一款最重要
建议:将打印结果重定向到log文件中,方便问题排查,确定是重启方法不对,还是重启时的一些客观因素导致的程序bug

nohup /xxxx/xx/python xxx.py >xxx.log 2>&1 &

我一直纠结于重启方法,结果是我的测试代码本身出现了问题。
由于我的代码中出现

cv.imshow()

导致在程序自启时,并没有图形化界面,报错如下:

qt.qpa.xcb: could not connect to display

2、确定ubuntu版本,16和18还是有差距的

3、参照了很多开机程序自启方案,最后按照这位大佬的方案成功了,其他大佬应该也都正确。这位大佬亲测正确。

https://www.r9it.com/20180613/ubuntu-18.04-auto-start.html

守护进程

方案1

流程:
先在/etc/crontab中写入开机时要启动,且要保持启动状态的脚本。如:/home/ubuntu路径下的project.sh
/home/ubuntu/project.sh的功能:监测进程是否启动,如果启动,打印启动,如果未启动,打印未启动并启动。

操作:
1、首先,执行下面命令,

echo '*/1 * * * * ubuntu /home/ubuntu/project.sh >> /home/ubuntu/project.log' >> /etc/crontab

即将*/1 * * * * ubuntu /home/ubuntu/project.sh >> /home/ubuntu/project.log写入 /etc/crontab。
开机时系统会去/etc/crontab中读取自启的内容。

解读:
用户ubuntu一分钟检测一次/home/ubuntu/project.sh进程是否启动,并将检测结果写入/home/ubuntu/project.log
监测频率可改:https://www.runoob.com/linux/linux-comm-crontab.html可以修改时间间隔
用户名称可改:改为root或者自己的用户
脚本路径可改:改为自己的project.sh所在路径

2、然后,将project.sh放入指定位置,project.sh内容如下

#!/bin/bash

time=$(date +%Y%m%d%H%M%S)
echo "===================检测开始时间:"$time"==================="

#project检测
project=`ps -ef | grep main.py| grep -v grep | awk '{print $2}'`  # 判断进程是否开启(main.py改为自己的启动程序名)
if [  -z "$project" ]
then 
	echo "#project未启动,执行启动命令"
    cd /home/ubuntu # 进入启动程序main.py的目录下
	nohup python main.py >main.log 2>&1 &  # 启动进程并将打印日志写入main.log,nohup结合>main.log 2>&1 &为后台启动,并将日志写入main.log。可自适应修改
else
	echo "#project正常运行"
fi

echo "=========================================================="

3、赋权限

sudo chmod 777 project.sh

4、等待自启
设置完毕,等待一分钟查看一下程序是否启动,如果没启动,先看看/home/ubuntu/main.log,判断程序本身是否正确,然后再看看/home/ubuntu/project.log,亲测是可以的。

方案2

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值