Skip to content
FunCoding

Search

Search docs, Skills and MCP

Linux 常驻服务

用 systemd user unit 固定工作区、工具 PATH、令牌环境和失败重启。

This page has not been translated into English yet. The original Chinese version is shown below.

将 qwen serve 长期运行时,服务管理器必须有完整的可执行路径和工具环境。以下是本机单用户模板,先替换路径再使用,不代表已配置生产级容器或多租户编排。

准备令牌与可执行路径

在日常 shell 检查实际位置:

which qwen gh git npm node

ExecStart 使用 qwen 的绝对路径,PATH 要包含可信的解释器和 agent 工具目录。systemd 不读取交互 shell profile。

下面路径由用户管理,不是 daemon 自动识别的内置 token 文件。首次创建或计划轮换时执行:

openssl rand -hex 32 > ~/.qwen-serve-token
chmod 600 ~/.qwen-serve-token
echo "QWEN_SERVER_TOKEN=$(cat ~/.qwen-serve-token)" > ~/.qwen-serve-token-env
chmod 600 ~/.qwen-serve-token-env

重新执行会覆盖旧令牌,需要同步更新客户端并重启服务。不要把真实 token 内联到通常可读的 unit Environment 行中。

User unit

保存到 ~/.config/systemd/user/qwen-serve.service,替换 /PATH/TO/qwen、/PATH/TO/USER/BIN 和项目路径:

[Unit]
Description=Qwen Code daemon
After=network.target

[Service]
Type=simple
WorkingDirectory=%h/project-a
ExecStart=/PATH/TO/qwen serve --hostname 127.0.0.1 --port 4170 --require-auth --workspace %h/project-a --workspace %h/project-b
Environment=PATH=/PATH/TO/USER/BIN:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
EnvironmentFile=%h/.qwen-serve-token-env
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=default.target

%h 在 user unit 中表示用户 home。模板增加 require-auth,让 health 也验证相同 bearer;如果外部探针需要访问它,应同步提供凭据。

启停和日志

systemctl --user daemon-reload
systemctl --user enable --now qwen-serve.service
loginctl enable-linger "$(whoami)"

linger 让用户管理器在退出登录后继续运行并支持重启后的服务启动;没有它,无界面主机的 SSH 登出可能结束 user manager。

journalctl --user -u qwen-serve -f
systemctl --user restart qwen-serve.service
systemctl --user disable --now qwen-serve.service

三条分别用于看日志、重启和停止/取消自动启动,应按需要单独执行。Restart=on-failure 不会把正常 systemctl stop 变成反复启动。

启动后,在新 daemon 会话确认 command -v gh 等工具可找到;缺少工具时调整服务 PATH 再重载,不依赖 ~/.bashrc 或 ~/.zshrc。服务器进程重启、客户端 SSE 重连和磁盘会话恢复不同,详见历史与恢复。

Windows 原生服务包装不在该官方模板范围,官方指向 WSL2 使用 systemd。系统级多用户 unit 是另一部署选择,仍应把用户凭据置于 0600 EnvironmentFile,而不是公共 unit 正文。