告别 nohup:用 Systemd 守护你的量化交易进程

为什么你的 Python 脚本总是莫名挂掉?是时候掌握 Linux 服务管理的终极武器了。

为什么不能只用 nohup

在实验室的早期,我也曾是一个 nohup python3 main.py & 的忠实信徒。直到有一天,我的行情接收脚本因为一个未捕获的 NetworkException 悄悄退出了,而我第二天醒来才发现,错过了整整一晚的 Tick 数据。

对于量化交易、FRP 穿透、以及任何 HomeLab 基础设施来说,我们需要的是一个管家,而不仅仅是一个后台运行符。

Systemd 就是这位管家。它能做到:

  1. 开机自启:服务器重启后自动拉起服务。
  2. 崩溃重启:程序挂了?它能自动帮你重启 (Restart on failure)。
  3. 日志管理:不再需要满屏的 output.log,用 journalctl 统一管理。

实战:把 Python 策略变成系统服务

假设我们要部署一个名为 market_maker.py 的做市策略,位于 /home/masiyuan/quant/ 目录下。

1. 编写 Unit 文件

Systemd 的核心配置文件叫做 Unit File,通常放在 /etc/systemd/system/ 目录下,以 .service 结尾。

我们需要创建一个 quant-bot.service

1
sudo nano /etc/systemd/system/quant-bot.service

写入以下内容(这是远思实验室的标准模板):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[Unit]
Description=Yuansi Quant Trading Bot
# 依赖关系:确保网络通了再启动,数据库准备好了再启动
After=network.target clickhouse-server.service

[Service]
# 运行用户:千万不要用 root 跑不明脚本!
User=masiyuan
Group=masiyuan

# 工作目录:Python 脚本里读取相对路径文件时以此为准
WorkingDirectory=/home/masiyuan/quant

# 启动命令:必须用绝对路径!
# 建议指向虚拟环境中的 python 解释器
ExecStart=/home/masiyuan/quant/venv/bin/python main.py

# 核心魔法:崩溃后自动重启
Restart=always
# 重启间隔:防止频繁重启导致 CPU 飙升
RestartSec=10s

# 日志输出:直接打到 journald,不需要自己重定向 >> log.txt
StandardOutput=journal
StandardError=journal

# 环境变量 (可选)
Environment="API_KEY=sk_live_xxxxxx"
Environment="PYTHONUNBUFFERED=1"

[Install]
# 运行级别:多用户模式(类似于 Windows 的正常启动)
WantedBy=multi-user.target

###2.激活与运行 写好配置文件后,需要通知Systemd 重载配置:

1
sudo systemctl daemon-reload

然后就是素质三连:

1
2
3
4
5
6
# 设置开机自启
sudo systemctl enable quant-bot
# 立即启动
sudo systemctl start quant-bot
# 查看状态(最常用)
sudo systemctl status quant-bot

如果看到绿色的Active:active (running),恭喜你,你的策略已经拥有了“不死之身”。

##进阶:像侦探一样查日志 程序跑起来了,但如果报错了去哪看?别再去翻那个几百MB的nohup.out了。 journalctl是Systemd的日志查看工具,功能极其强大:

1
2
3
4
5
6
7
8
9
#1,实时查看日志 (类似tail -f)
journalctl -u quant-bot - f
# 2,查看最近50行
journalctl -u quant-bot -n 50
# 3,只看今天的日志
journalctl -u quant-bot --since
"today"
# 4,只看报错信息(Error级别)
journalctl -u quant-bot -p err