怎么在Linux上设置代码服务开机自启,保持后台运行

6 阅读1分钟

设置好了之后,不再需要每次都去代码文件中python -m app.main,直接开机自启动,再也不担心挂了。

即便是普通用户,不是root管理员用户依旧可以使用的方法。

一,查看是否启用了systemd用户服务

方法一,检查是否已启用 linger

loginctl show-user $(whoami) | grep Linger

输出:

  • Linger=yes → 已启用,用户服务可开机自启 ✅
  • Linger=no → 未启用,用户服务只在你登录后运行 ❌

✅ 只要看到 Linger=yes,就说明你的用户服务可以在 不登录的情况下开机自启

如果为no,那必须进行设置,一般都默认为yes

方法二:直接查看 linger 文件(无需权限)

linger 的状态实际上由一个文件控制:

ls /var/lib/systemd/linger/$(whoami)
  • 如果文件 存在 → linger 已启用 ✅
  • 如果提示 No such file or directory → 未启用 ❌

💡 这个目录通常只有 root 能写,但普通用户可以读(所以能验证)。

如果没有启用,那么运行以下命令启用:

sudo loginctl enable-linger $(whoami)

完全没有 sudo 权限(纯普通用户)

那你 无法自己启用 linger,必须请系统管理员(root)帮你执行一次:

 # 管理员执行(替换 your_username)
sudo loginctl enable-linger your_username

一旦启用,后续你就可以自由使用 systemctl --user enable/start/... 管理服务,并且服务会在系统启动时自动运行(无需你登录)。

      • 如果截止到这里依旧无法成功,最好去问问AI别的办法。

二,systemd已经确定启动之后,开始写systemd文件。

第一步:创建服务文件

请在终端中运行以下命令,创建一个配置文件:

mkdir -p ~/.config/systemd/user
# ~/.config/systemd/user/` 这个路径这是systemd用户服务的标准位置,由 systemd 官方规范定义。
nano ~/.config/systemd/user/{文件名}.service 
# nano如果显示没有该命令,用vim(建议用vim):
vim ~/.config/systemd/user/{文件名}.service
# 进入后按 i 键开始编辑,看下面的“编辑页面中”,编辑完后按Esc后,再按:wq保存退出

编辑页面中:

[Unit] 
# 这里写你的服务描述,怎么写都行
Description=My Python App Service 
After=network.target 

[Service] 
# 1. 修改这里:你的代码所在的文件夹路径,cd命令进入你运行python -m app.main时的文件目录,pwd命令查看整体路径。
WorkingDirectory=/home/appuser/your_project_folder #这里写pwd查看到的路径 
# 2. 修改这里:你的python绝对路径,先激活你的python虚拟环境venv,在用which python 命令查看
ExecStart=/usr/bin/python3 -m app.main 
Restart=always 
RestartSec=5 

[Install] 
WantedBy=default.target

第二步:保存并启动

在 vim 中按 Esc,输入 :wq 保存退出,然后执行:

# 1.重载配置
systemctl --user daemon-reload
# 2. 开启开机自启 
systemctl --user enable {文件名}.service
# 3. 启动服务
systemctl --user start {文件名}.service
# 4. 查看状态(检查是否报错)
systemctl --user status {文件名}.service

如果 status 显示 active (running),那就大功告成了!

✅ 查看你的服务日志的命令

# 实时跟踪日志(推荐!能看到最新输出,按 Ctrl+C 退出) 
journalctl --user -u milvus-mcp.service -f
# 查看当前用户所有已加载的服务(包括运行/停止的) 
systemctl --user list-units --type=service  
# 只看正在运行的服务(最常用) 
systemctl --user list-units --type=service --state=running 
# 查看所有已启用(开机自启)的服务 
systemctl --user list-unit-files --type=service --state=enabled

🔒 如果遇到权限问题(如你之前看到的红色错误):

请让管理员执行(只需一次):

sudo usermod -aG systemd-journal $USER

然后退出 SSH 重新登录,之后就能正常看日志了。

💡 替代方案(无需改权限):
如果你无法获得管理员权限,也可以在服务配置中主动把日志写入文件,例如:

[Service]
ExecStart=/app/venv313/bin/python -m app.main
StandardOutput=append:/home/appuser/milvus.log
StandardError=append:/home/appuser/milvus_error.log

然后用 tail -f ~/milvus.log 查看。

最终,确认我的服务已经开启了开机自启

✅ 验证分两步:

✅ 第一步:确认服务已启用(开机自启)

systemctl --user is-enabled milvus-mcp.service
  • 输出 enabled → 已设置开机自启 ✅
  • 输出 disabled → 未设置 ❌

✅ 第二步:确认 linger 已开启(关键!)

1loginctl show-user $(whoami) | grep Linger
  • 输出 Linger=yes → 即使你没登录,服务也能在后台运行 ✅
  • 输出 Linger=no → 你一登出,服务就停了 ❌

🎯 只有同时满足 enabled + Linger=yes,才能实现“服务器重启后自动启动,且无需人工登录”