记录一下工作中,遇见的带图形界面的Python程序的开机自启动实现方案以及问题。
一,设置一个启动可执行文件的脚本
1、进入包含要运行py文件的文件夹下
cd /path/to/python/script/directory
#确保将/path/to/python/script/directory替换为你的可执行文件的实际路径
2、创建sh脚本(文本名.sh)(如果不存在会自动创建)
sudo vim myapp.sh
3、在sh文件中输入以下内容
#!/bin/bash
### BEGIN INIT INFO
# Provides:myapp
# Required-Start: $network $remote_fs $local_fs
# Required-Stop: $network $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: myapp
# Description: myapp_start
### END INIT INFO
# Change to the directory containing the Python script
cd /path/to/python/script/directory
#确保将/path/to/python/script/directory替换为你的可执行文件的实际路径
# Run the Python script
python myscript.py
exit 0
按ESC退出编辑,输入:wq保存并退出。
4、给这个脚本文件执行权限。
sudo chmod +x myapp.sh
5、运行脚本
./myapp.sh
如果在你的用户命令行而非root用户命令行下成功启动,恭喜你完成了第一步。
二,使用systemd
服务
1,创建一个新的服务单元文件
cd /etc/systemd/system
sudo vim my_service.service
2、 在service文件中输入以下内容
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/path/to/your/script.sh
#如果脚本要运行图形界面要加上下面两句
Environment="QT_QPA_PLATFORM=xcb"
Environment="DISPLAY=:0"
[Install]
WantedBy=multi-user.target
3、重新加载systemd
管理器配置
sudo systemctl daemon-reload
4、启用服务以在启动时自动启动
sudo systemctl enable my_service.service
重新开机即可实现开机自启
三、问题解决
如果这个.sh脚本还会报错,应该是环境的问题,可以通过root用户和普通用户在可执行文件的目录下运行.sh脚本,如果普通用户可以运行,root用户不能运行,基本上就是环境依赖的问题了,在root用户下安装对应环境即可。
记录一下工作中,遇见的带图形界面的Python程序的开机自启动实现方案以及问题。
一,设置一个启动可执行文件的脚本
1、进入包含要运行py文件的文件夹下
cd /path/to/python/script/directory
#确保将/path/to/python/script/directory替换为你的可执行文件的实际路径
2、创建sh脚本(文本名.sh)(如果不存在会自动创建)
sudo vim myapp.sh
3、在sh文件中输入以下内容
#!/bin/bash
### BEGIN INIT INFO
# Provides:myapp
# Required-Start: $network $remote_fs $local_fs
# Required-Stop: $network $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: myapp
# Description: myapp_start
### END INIT INFO
# Change to the directory containing the Python script
cd /path/to/python/script/directory
#确保将/path/to/python/script/directory替换为你的可执行文件的实际路径
# Run the Python script
python myscript.py
exit 0
按ESC退出编辑,输入:wq保存并退出。
4、给这个脚本文件执行权限。
sudo chmod +x myapp.sh
5、运行脚本
./myapp.sh
如果在你的用户命令行而非root用户命令行下成功启动,恭喜你完成了第一步。
二,使用systemd
服务
1,创建一个新的服务单元文件
cd /etc/systemd/system
sudo vim my_service.service
2、 在service文件中输入以下内容
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/path/to/your/script.sh
#如果脚本要运行图形界面要加上下面两句
Environment="QT_QPA_PLATFORM=xcb"
Environment="DISPLAY=:0"
[Install]
WantedBy=multi-user.target
3、重新加载systemd
管理器配置
sudo systemctl daemon-reload
4、启用服务以在启动时自动启动
sudo systemctl enable my_service.service
重新开机即可实现开机自启
三、问题解决
如果这个.sh脚本还会报错,应该是环境的问题,可以通过root用户和普通用户在可执行文件的目录下运行.sh脚本,如果普通用户可以运行,root用户不能运行,基本上就是环境依赖的问题了,在root用户下安装对应环境即可。