文章目录
前言
近期学弟学妹正在做校电赛,不太会配置开机自启动文件,以下是一个记录。
有问题可以发邮件到邮箱layraliu@foxmail.com
一、Supervisor
Supervisor 是一个客户端/服务器系统,允许用户控制类 UNIX 操作系统上的多个进程。它可以很方便的监听、启动、停止、重启一个或多个进程。
注意:Supervisor 只在 Python 3.4 或更高版本以及 Python 2.7 上工作。
1.安装
apt-get install supervisor
2.配置文件
cd /etc/supervisor/conf.d/ #进入配置文件夹 sudo nano 配置文件名.conf #建立配置文件并编辑
以下是配置文件:
[program:配置文件名] directory=运行文件所在文件夹绝对路径 command=bash 运行文件绝对路径 user=root #指定用户 autostart=true #开机自启 redirect_stderr=true #将标准错误重定向 stdout_logfile=运行文件绝对路径/supervisor.log #输出错误日志文件 stopasgroup=true #是否向子进程发送停止信号 killasgroup=true #是否向子进程发送kill信号 #以上两段实际上是为了一键关闭所开的所有程序 stopsignal=INT #杀死进程时发送的信号,模拟ctrl+c
sudo supervisorctl #进入supervisor客户端的交互终端 update #重新加载新配置文件 status #查看状态 sudo supervisorctl start 配置文件名 #运行你设置自启动的文件 sudo supervisorctl stop 配置文件名 #关闭运行中的自启动文件
其实在这里,应该就已经完成了,但由于学弟学妹需要调出opencv的弹窗进行调试(如果不需要图形化界面教程已经就结束了)。
这里由于Linux内核的原因,会导致程序崩溃。
可以使用以下命令实时查看日志:tail -f supervisor.log 文件的绝对路径
可能会提示"无法连接到X服务器:0.0"(cannot connect to X server :0.0)
需要进行以下的操作。
在需要运行的sh自启动文件里加入:
export DISPLAY=:0
在主目录的.profile文件下加入:
我参考了
xhost +
经过以上操作应该就可以了,开机后如果想看程序是否运行(如果你的程序无显示),其实可以通过:ps -aux
查看所有进程。
可以直接:sudo kill 要杀死程序的pid号
(推荐)也可以通过交互式终端杀死:sudo supervisorctl stop 配置文件名
(这里值得注意的是supervisor是不支持tab补齐的。)
其实如果你开机只有一个自启动文件的话:也可:sudo supervisorctl stop all
二、开机自启动文件
1.关闭用户sudo密码
每次sudo要输入密码都很烦,可以进行以下操作:
sudo nano /etc/sudoers
在文件的最后加入:
用户名 ALL=(ALL:ALL) NOPASSWD:ALL
2.自启动sh文件
代码如下(示例):
#!/bin/bash sudo chmod 777 /dev/ttyUSB0 export DISPLAY=:0 python3 xxx.py
三、图形化界面的打开与关闭
Linux是非常鄙视图形化界面的,请大家习惯使用非图形化界面。
暂时关闭:sudo init 3
暂时打开:sudo init 5
永久关闭:sudo systemctl set-default multi-user.target
记得reboot
永久打开:sudo systemctl set-default graphical.target
记得reboot
总结
希望可以给大家带来简洁的体验,我看网上是修改rc.local,其实这样非常不优雅。