如何服务器用守护进程保证程序稳定运行
一、前言
平常在使用服务器的时候,服务一直不稳定,遂从nohup改为创建一个systemd服务来管理Python程序。
要求:有root权限
二、步骤
1、创建systemd服务文件
创建一个新的systemd服务文件,例如/etc/systemd/system/your-service.service:
我的是app.py
那么就创建:/etc/systemd/system/app.service
内容模版如下:
[Unit]
Description=My Python Service
After=network.target[Service]
ExecStart=/usr/bin/python /home/username/app/your_script.py
Restart=always
User=username
Group=username
Environment=PATH=/usr/bin:/usr/local/bin
WorkingDirectory=/home/username/app
StandardOutput=journal
StandardError=journal
SyslogIdentifier=my-python-service[Install]
WantedBy=multi-user.target
模版中必须修改的地方有下面三个:
- ExecStart: 指定你的 Python 解释器的路径(如果你使用了虚拟环境,这里应该是虚拟环境中的 Python 解释器路径)和你的 Python 脚本的路径。
- User 和 Group: 指定运行该服务的用户和组,确保该用户对你的 Python 脚本有执行权限。
- WorkingDirectory: 指定你的 Python 脚本的工作目录,通常是脚本所在的目录。
写好后如下:
2、应用更改并重启服务
在做出这些更改后,重新加载 systemd 配置并尝试重启服务:
sudo systemctl daemon-reload
sudo systemctl restart app.service
重启systemctl服务完后,程序就能稳定运行了
3、查询服务状态以及日志输出
方法一:查询systemctl服务下所启动服务的状态
sudo systemctl status app.service
注:app.service改为第一步你创建的服务文件
方法二:使用journalctl 工具查询启动服务的日志
journalctl 是一个用于查询和显示从 systemd 日志管理器收集的日志的工具。systemd-journald 服务收集和管理来自内核、启动过程、系统服务以及其他来源的日志信息。这些日志被存储在一个结构化、索引化的二进制文件中,通常位于 /var/log/journal/ 目录下。
journalctl 提供了强大的功能来检索和分析日志数据。它可以用来:
- 显示所有日志信息,从最早到最新。
- 过滤日志条目,基于时间、服务、优先级等标准。
- 跟踪实时日志输出。
- 显示特定时间范围内的日志。
- 显示特定系统服务或单元的日志。
- 输出日志到不同的格式,如 JSON。
- 导出日志数据供进一步分析。
查询指令如下
sudo journalctl -u app.service
注:app.service改为第一步你创建的服务文件