Ubuntu 配置服务后台运行

经常在工作中会把一些常用的功能,做成服务,供内网公共使用,极大的提高使用效率。

下面记录了在 Ubuntu 上配置服务后台运行的标准流程,可以拿来即用。

1、创建systemd服务文件

sudo vi /etc/systemd/system/myservice.service

把其中的 myservice 改为自己的服务名。

2、编辑文件内容

这是关键的一步,配置内容就是我们服务的启动参数信息。

[Unit]
Description=My Custom Service
After=network.target

[Service]
Type=simple
User=yourusername
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/python3 /path/to/your/app/main.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

[Unit] 段 – 服务描述与依赖关系

  • Description=My Custom Service
    服务的简短描述,用于 systemctl status 等命令中显示服务用途。可自定义。
  • After=network.target
    指定本服务在 network.target(网络已就绪)之后启动。Systemd 会尽量满足顺序要求,但不保证依赖的服务完全运行成功,只保证 network.target 已启动。

[Service] 段 – 服务运行行为

  • Type=simple
    服务类型为 simple,表示 ExecStart 启动的进程就是服务的主进程,systemd 会立即启动后续单元,不等待进程 fork 或通知就绪。这是最常用的类型。
  • User=yourusername
    指定运行该服务的用户身份。这里以 yourusername 为例,需替换为实际系统用户名。使用非 root 用户可提升安全性。
  • WorkingDirectory=/path/to/your/app
    设置服务进程的工作目录。启动服务前会 cd 到此路径,相对路径命令将基于此目录解析。建议替换为实际应用目录。
  • ExecStart=/usr/bin/python3 /path/to/your/app/main.py
    服务启动时执行的完整命令行。第一个参数是可执行文件路径(此处为 Python3 解释器),后续为传给它的参数。必须使用绝对路径。
  • Restart=always
    服务退出后的重启策略。always 表示无论进程退出代码是什么(正常退出、崩溃、被杀死等),都会自动重启。其他可选值:noon-successon-failureon-abnormal 等。
  • RestartSec=10
    重启前的等待时间,单位为秒。即服务停止后等待 10 秒再尝试启动,避免频繁重启导致系统负载过高。

[Install] 段 – 服务安装配置

  • WantedBy=multi-user.target
    定义该服务被哪个“目标(target)”环境所依赖。multi-user.target 代表多用户命令行运行级别(类似传统 runlevel 3)。当启用服务(systemctl enable)时,systemd 会在 /etc/systemd/system/multi-user.target.wants/ 目录下创建该服务的软链接,从而在系统启动进入多用户模式时自动启动本服务。

3、管理服务常用命令

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start myservice

# 设置开机自启
sudo systemctl enable myservice

# 查看服务状态
sudo systemctl status myservice

# 停止服务
sudo systemctl stop myservice

# 查看日志
sudo journalctl -u myservice -f

正常情况下,按上面配置文件配置后启动服务,status 查看服务状态是 active (running) 就没什么问题,如果有问题,也会提示具体的错误,发给 AI 定位排查一下即可。

以上,希望能给你的 AI 提供一份正确的养料。

#测试运维 3