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。

Logo

更多推荐