栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

让linux开机自动运行python服务或者程序

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

让linux开机自动运行python服务或者程序

文章目录
  • 1 了解运行机制
  • 2 编写service
  • 3 开启服务
  • 4 设置开机启动服务(无界面)
  • 5 设置开机启动app(有界面)

1 了解运行机制

参考https://blog.csdn.net/wo18237095579/article/details/89376857#_4
这篇讲的很清楚了

大概意思是这样的:Systemd 是系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。
所以按照它的规则编写我们自己的service单元,就可以开机启动程序。

2 编写service

位置: /etc/systemd/system
我们在这个目录下写入我们的yourServiceName.service

[Unit]
Description=yourDescription
After=network.service
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=yourSrcPath
ExecStart=/yourInstallPath/python3 server.py
PrivateTmp=true
Restart=on-failure
[Install]
WantedBy=multi-user.target

ps:大意是
Type指定了我的类型是simple
after指定了启动network.service服务后开始启动我的服务,
ExecStart指定了执行/usr/bin/python3 server.py ,
WorkingDirectory指定了工作空间在
PrivateTmp指定了开启独立的进程空间,

3 开启服务
systemctl start yourServiceName.service

可能会碰到一些问题,比如提示你参数错误,我的是因为文件内容格式有点问题报错,还有可能发生别的错误,这时候它会提示你用status命令查看

systemctl status yourServiceName.service

这里可以看到具体原因
1)Exec format error
2)再比如运行时程序出错退出了,什么的。
通过这两句命令在这里把service调试完毕。如果修改了.service,会提示使用
systemctl daemon-reload 重新加载

另外,貌似通过这种方式启动的,不会在命令行里给你输出,所以print那些就无效了,只能用其功能去测试

通过ps -aux | grep java
可以查看到已启动的python程序

可能的报错:
1)code=exited,status=203/EXEC
systemctl执行.sh脚本文件时,需要在头部指定脚本解释器
#!/bin/sh

4 设置开机启动服务(无界面)
systemctl enable yourServiceName.service

会显示Created symlink from /etc/systemd/system/multi-user.target.wants/jenkins.service to /etc/systemd/system/jenkins.service.

若需要延迟执行,可以编辑.sh文件

sleep 60
xxxxx
5 设置开机启动app(有界面)

以上是开机自启服务,适用于没有图形界面的程序。后来发现一种更加简便的方法,而且可以带界面,适用于ubuntu

首先,sudo gedit ~/.bashrc
将运行程序的命令行语句写在最底部
比如:
python xxx.py

保存后执行source ~/.bashrc

然后设置开机自启动终端就可以运行该程序了。

终端中输入gnome-session-properties打开Ubuntu开机首选项管理
添加,名称随便写,命令gnome-terminal。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/834118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号