一.ubuntu系统"启动应用程序"
1.编写sh文件
#!/bin/bash
sudo python3 /home/XX/XX/test.py
注:py文件最好使用决定路径
2.设置开机自启
首先在ubuntu左下角点击"应用程序显示"
然后点击"启动应用程序"
最后把sh文件添加上去,点击确定即可
二.systemd 服务实现开机自启(推荐)
1.编写sh文件
#!/bin/bash
sudo python3 /home/XX/XX/test.py
可以设置成后台运行,并保留当前运行程序的PID号方便必要时终端该程序。
#!/bin/bash
nohup python3 /home/XX/XX/test.py > /dev/null 2>&1 &
echo $! > /home/xx/xx/xx.pid #当前文件的pid号就会保存在xx.pid文件内
sleep infinity #后台始终运行服务
2.编写service文件
# myscript.service
[Unit]
Description=My Script Service
# 如果右多个service启动服务,并且有先后顺序,这里可以填一个启动服务的名称,意思是上一个启动后再启动它,这里只是先后运行而不是上一个运行完才运行下一个.如:After=XX.service
After=network.target
[Service]
ExecStart=/path/to/your/XX.sh #这里编写你电脑sh文件所在目录
Restart=on-failure
# user和group可以改成当前计算机的用户名(终端输入:users,可以查到),也可以不改
User=root
Group=root
[Install]
WantedBy=multi-user.target
3.将sevice文件复制到/etc/systemd/system/
在service所在文件夹打开终端
sudo cp ./myscript.service /etc/systemd/system/
4.systemd 服务启动
(1).重新加载服务:
sudo systemctl daemon-reload
(2).启动开机自启:
sudo systemctl enable myscript.service
(3).开启服务:
sudo systemctl start myscript.service
(4).查看服务状态:
sudo systemctl status myscript.service
查看服务状态如果终端新鲜绿色的active(running)表示开启成功,其他显示都表示没有成功.
还有一些其他的指令操作,如:停止运行的服务和关掉开机自启
# 停掉服务
sudo systemctl stop myscript.service
# 关闭开机自启
sudo systemctl disable myscript.service
以上就可以实现一个开机自启的服务,但是在实际应用中遇到的问题我在下面罗列一下
三.systemd服务实现过程中遇到的问题
我遇到的主要问题有两个,都是在sh文件中出现的,其中一个是我所要运行的py文件目录问题,另一个是运行环境的问题。
1.py文件目录问题
最初创建文件的时候我把sh文件和py文件放在一个目录下
sh文件编写如下:
#!/bin/bash
python3 ./1.py
直接在目录打开终端输入./xx.sh是可以成功测试运行,但是system服务开机后并不能运行1.py程序,所有在设置运行程序时sh文件内需设置程序文件的绝对路径。
#!/bin/bash
python3 /home/xx/xx/1.py
2.运行环境问题
在上述问题解决后运行程序时可能会出现报错:XXpython库不存在,如果确实没安装的安装这些库,如果pip list或pip3 list查到已经安装这些库,还是提示不存在的就需要再sh文件中设置python的运行环境,既添加当前终端的python运行环境。
(1)打开终端输入“echo $PYTHONPATH”,会输出当前终端所运行的python环境目录
(2)在sh文件开头添加python环境
export PYTHONPATH=(添加上边终端输出的目录)
第二个是ros环境,如果sh文件有运行ros的需要,在sh文件开头添加ros运行环境,
source /opt/ros/noetic/steup.bash