ubuntu18.04设置开机自启动-不能用于图像界面的程序
https://www.jianshu.com/p/9274b18b35e3
这种方法不能用于有图像界面的python程序
1 设置开机自启动
1、建立rc-local.service文件
sudo gedit /etc/systemd/system/rc-local.service
2、将下列内容复制进rc-local.service文件
[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
3、创建文件rc.local
sudo gedit /etc/rc.local
4、将下列内容复制进rc.local文件
#!/bin/sh -e echo "看到这行字,说明添加自启动脚本成功。" > /usr/local/test.log exit 0
5、给rc.local加上权限
sudo chmod +x /etc/rc.local
6、启用服务
sudo systemctl enable rc-local
7、启动服务并检查状态
sudo systemctl start rc-local.service sudo systemctl status rc-local.service
8、重启并检查test.log文件
cat /usr/local/test.log
如果能看到内容,说明设置成功,你就可以通过编辑rc.local文件来设置启动脚本了\
重新开机
确实看到了,证明这个简单的开机脚本执行了。
但是加入python可执行文件的操作时候就开始报错。
2解决python启动无法导入第三方模块问题
https://www.codeleading.com/article/55531668480/
看日志发现导入模块失败,但是本地直接执行脚本没有任何问题
如 ImportError: No module named torch
分析
1)在本地进入python交互环境,查看python搜索路径
nvidia@nvidia-desktop:~/data/projects/dt_product$ python Python 2.7.15+ (default, Nov 27 2018, 23:36:35) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/home/nvidia/.local/lib/python2.7/site-packages', '/home/nvidia/data/projects/dt_product', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-aarch64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0'] >>>
ctrl+h show dir/...
2)新建一个python脚本设置为开机启动,在此脚本中获取python搜索路径
!test.py import sys print sys.path
重新启动环境查看启动重定向得日志 log.txt :
['/home/nvidia/data/projects/dt_product', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-aarch64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0']
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/nano/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
对比发现少了一个路径:
python2-
/home/nvidia/.local/lib/python2.7/site-packages
python3-
/home/nano/.local/lib/python3.6/site-packages
环境上看此路径为无法import 包得安装路径;应该是安装这些包时留的坑
解决
一种是安装时注意下路径,一种是把这个路径加到环境变量中。
加入环境变量网上搜有几种,但是试了都不行,因为启动python项目时改环境变量未生效,所以最简单得就是在启动python项目前加入该变量。打开刚才创建得启动python项目得文件,启动前加入环境变量
sudo gedit /etc/rc.local
测试1 实测无用
#!/bin/sh -e #加入环境变量 export PYTHONPATH=/home/nvidia/.local/lib/python2.7/site-packages:$PYTHONPATH exit 0
测试2
直接在代码里,手动导入python的库安装路径,让程序执行阶段自己找到
import sys
sys.append("/home/nano/.local/lib/python3.6/site-packages")
不在报找不到库错误,搞定!
新问题
但是程序卡在了开机界面不执行了。
使用脚本
#!/bin/sh -e
#实测无用 export PYTHONPATH=/home/nano/.local/lib/python3.6/site-packages:$PYTHONPATH echo "看
到这行字,说明添加自启动脚本成功。" > /home/nano/Desktop/v4_nano/test.log
#开启串口权限 echo "admin" | sudo -S sudo chmod -R 777 /dev/ttyTHS1 echo "start ..." echo "看到这行字,说明添加ttyTHS1成功。" > /home/nano/Desktop/v4_nano/test.log cd /home/nano/Desktop/v4_nano/v4_video_control/ #进入可执行程序所在的目录 #/usr/local/bin/python3 echo "admin" | sudo -S sudo /usr/bin/python3 v1_Main.py #用自动输入密码 echo "看到这行字,说明添加python3成功。" > /home/nano/Desktop/v4_nano/test.log echo "stop ..." exit 0
#!/bin/bash echo "run 看到这行字,说明添加自启动脚本成功。" > /home/nano/Desktop/v4_nano/test_desk.log echo "admin" | sudo -S sudo chmod -R 777 /dev/ttyTHS1 echo "start ..." cd /home/nano/Desktop/v4_nano/v4_video_control/ #进入可执行程序所在的目录 #/usr/local/bin/python3 #echo "admin" | sudo -S sudo /usr/bin/python3 v1_Main.py #用自动输入密码 source /etc/profile /usr/bin/python3 v1_Main.py echo "run 看到这行字,说明python3启动脚本成功。" > /home/nano/Desktop/v4_nano/test_desk.log echo "stop ..."