ubuntu实现程序开机自启(systemd 服务和系统自带启动应用程序)

一.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值