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 ..."