当前位置:   article > 正文

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

python程序linux自启动

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

3 开启服务

systemctl start yourServiceName.service
  • 1

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

systemctl status yourServiceName.service
  • 1

这里可以看到具体原因
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
  • 1

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

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

sleep 60
xxxxx
  • 1
  • 2

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

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

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

保存后执行source ~/.bashrc

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/54980?site
推荐阅读
相关标签
  

闽ICP备14008679号