设置ctp_md_client作为后台服务开机自启动

存档预览:设置ctp_md_client作为后台服务开机自启动 : ubuntu@VM-0-11-ubuntu:~$ sudo nano /etc/systemd/system/ctp_md…(全文以下方原始文本完整保留)

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
设置ctp_md_client作为后台服务开机自启动

:
ubuntu@VM-0-11-ubuntu:~$ sudo nano /etc/systemd/system/ctp_md_client.service

[Unit]
Description=CTP Market Data Client

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/ctpubuntu
ExecStart=/home/ubuntu/ctpubuntu/ctp_md_client
Environment="LD_LIBRARY_PATH=/home/ubuntu/ctpubuntu/ctpapi"
Restart=always

[Install]
WantedBy=multi-user.target



ubuntu@VM-0-11-ubuntu:~$ sudo systemctl daemon-reload
ubuntu@VM-0-11-ubuntu:~$ sudo systemctl start ctp_md_client
ubuntu@VM-0-11-ubuntu:~$ sudo systemctl enable ctp_md_client
Created symlink /etc/systemd/system/multi-user.target.wants/ctp_md_client.service → /etc/systemd/system/ctp_md_client.service.
ubuntu@VM-0-11-ubuntu:~$ service ctp_md_client status
● ctp_md_client.service - CTP Market Data Client
Loaded: loaded (/etc/systemd/system/ctp_md_client.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-06-08 00:08:31 CST; 40s ago
Main PID: 1286810 (ctp_md_client)
Tasks: 3 (limit: 1964)
Memory: 2.8M (peak: 3.0M)
CPU: 850ms
CGroup: /system.slice/ctp_md_client.service
└─1286810 /home/ubuntu/ctpubuntu/ctp_md_client

Jun 08 00:08:31 VM-0-11-ubuntu systemd[1]: Started ctp_md_client.service - CTP Market Data Client.
Jun 08 00:08:31 VM-0-11-ubuntu ctp_md_client[1286810]: tcp://180.168.146.187:10212
Jun 08 00:08:31 VM-0-11-ubuntu ctp_md_client[1286810]: CTP行情客户端已启动...
ubuntu@VM-0-11-ubuntu:~$ sudo reboot

Broadcast message from root@VM-0-11-ubuntu on pts/3 (Sun 2025-06-08 00:09:48 CST):

The system will reboot now!

ubuntu@VM-0-11-ubuntu:~$
Using username "ubuntu".
Authenticating with public key "imported-openssh-key"
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-60-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro

System information as of Sun Jun 8 12:12:16 AM CST 2025

System load: 0.34 Processes: 126
Usage of /: 43.0% of 49.10GB Users logged in: 0
Memory usage: 14% IPv4 address for eth0: 10.3.0.11
Swap usage: 0%

* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.

https://ubuntu.com/engage/secure-kubernetes-at-the-edge

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


Last login: Sat Jun 7 22:15:31 2025 from 36.6.2.38
ubuntu@VM-0-11-ubuntu:~$ service ctp_md_client status
● ctp_md_client.service - CTP Market Data Client
Loaded: loaded (/etc/systemd/system/ctp_md_client.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-06-08 00:10:10 CST; 2min 13s ago
Main PID: 917 (ctp_md_client)
Tasks: 3 (limit: 1960)
Memory: 3.9M (peak: 7.6M)
CPU: 3.131s
CGroup: /system.slice/ctp_md_client.service
└─917 /home/ubuntu/ctpubuntu/ctp_md_client

Jun 08 00:10:10 VM-0-11-ubuntu systemd[1]: Started ctp_md_client.service - CTP Market Data Client.
Jun 08 00:10:10 VM-0-11-ubuntu ctp_md_client[917]: tcp://180.168.146.187:10212
Jun 08 00:10:10 VM-0-11-ubuntu ctp_md_client[917]: CTP行情客户端已启动...
ubuntu@VM-0-11-ubuntu:~$








将 ctp_md_client 设置为系统服务后,原本打印到终端的输出会根据服务配置重定向。以下是完整的解决方案:

一、输出流向说明
输出类型 默认去向 推荐处理方式
标准输出(stdout) 丢失 重定向到日志文件
标准错误(stderr) 丢失 重定向到日志文件
系统日志 不记录(除非主动调用logger) 配置systemd捕获
二、创建Systemd服务文件
创建 /etc/systemd/system/ctp_md.service:

ini
[Unit]
Description=CTP Market Data Client
After=network.target

[Service]
Type=simple
User=ctpuser # 建议创建专用用户
WorkingDirectory=/path/to/ctp
ExecStart=/path/to/ctp_md_client -c /etc/ctp/config.ini

# 日志重定向配置
StandardOutput=file:/var/log/ctp/md.log
StandardError=file:/var/log/ctp/md_error.log
# 或使用journald:
# StandardOutput=journal
# StandardError=journal

# 自动重启配置
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target
三、关键配置详解
1. 日志文件管理
bash
# 创建日志目录
sudo mkdir -p /var/log/ctp
sudo chown ctpuser:ctpuser /var/log/ctp

# 日志轮转配置 (/etc/logrotate.d/ctp)
/var/log/ctp/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
create 0640 ctpuser ctpuser
}
2. 环境变量传递
ini
[Service]
Environment="LD_LIBRARY_PATH=/path/to/ctpapi"
Environment="CTP_LOG_LEVEL=debug"
3. 资源限制
ini
[Service]
LimitNOFILE=65535
LimitMEMLOCK=infinity
四、服务管理命令
bash
# 重载服务配置
sudo systemctl daemon-reload

# 启用开机启动
sudo systemctl enable ctp_md

# 启动服务
sudo systemctl start ctp_md

# 查看状态
sudo systemctl status ctp_md

# 查看日志(如果使用journald)
journalctl -u ctp_md -f
五、日志查看方式
1. 直接查看日志文件
bash
tail -f /var/log/ctp/md.log
tail -f /var/log/ctp/md_error.log
2. 通过journald查看
bash
# 实时查看
journalctl -u ctp_md -f

# 按时间筛选
journalctl -u ctp_md --since "2023-06-01" --until "2023-06-02"

# 导出完整日志
journalctl -u ctp_md > ctp_md_full.log
六、高级调试技巧
1. 临时输出到控制台
ini
[Service]
StandardOutput=tty
StandardError=tty
TTYPath=/dev/console # 需要配合以下命令
sudo systemctl enable getty@tty1.service
2. 多日志分流
bash
ExecStart=/bin/sh -c '/path/to/ctp_md_client 2>&1 | tee -a /var/log/ctp/full.log | logger -t ctp_md'
3. 核心转储配置
bash
# 在服务文件中添加
LimitCORE=infinity
# 然后执行
sudo sysctl -w kernel.core_pattern=/var/coredumps/core-%e-%p-%t
七、常见问题处理
1. 无日志输出
检查项:

bash
# 确认服务用户有写权限
sudo -u ctpuser touch /var/log/ctp/test.log

# 检查SELinux
sudo ausearch -m avc -ts recent | grep ctp
2. 日志文件过大
解决方案:

ini
[Service]
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=ctp_md
3. 服务启动失败
调试命令:

bash
sudo systemctl status ctp_md -l
sudo journalctl -xe
八、生产环境建议
结构化日志

cpp
// 在代码中使用JSON格式日志
void OnRtnDepthMarketData(...) {
std::cout << R"({"time":")" << GetCurrentTime() << R"(","instrument":")"
<< pDepthMarketData->InstrumentID << R"("})" << std::endl;
}
监控集成

bash
# Prometheus监控示例
echo 'ctp_status{service="md"} 1' | curl --data-binary @- http://monitor:9091/metrics/job/ctp
报警配置

bash
# 检测服务挂掉
sudo apt install monit
# /etc/monit/conf.d/ctp
check process ctp_md with pidfile /run/ctp_md.pid
start program = "/bin/systemctl start ctp_md"
stop program = "/bin/systemctl stop ctp_md"
if not exist then alert