前言

平时会玩玩儿求生之路,搭了服务器,一直都是使用的screen来保持服务端挂起,但是从来没管过日志的问题。

最近发现一些插件是会在终端打印日志的,但是我不可能一直盯着screen终端啊,还是得保存在文件中,在这里记录下。

开始

先看看我原来的命令,就很空,什么也没有,直接使用screen挂了个求生之路启动命令

1
screen -S left4dead2 bash /opt/game/steam/Left4Dead2/start.sh

下面我们进行改造

screen命令

首先,我们改下screen的挂起命令,加上一些参数

1
screen -L -Logfile "/opt/logs/l4d2/l4d2_log_$(date +%Y%m%d_%H%M%S).log" -S left4dead2 -t l4d2_server bash /opt/game/steam/Left4Dead2/start.sh

命令参数解析表

参数说明
-L启用日志记录功能。
-Logfile "/opt/game/steam/Left4Dead2/logs/..."关键参数:指定日志文件的完整路径和名称。使用 $(date +%Y%m%d_%H%M%S)可以为每次启动生成一个带时间戳的唯一日志文件,避免覆盖。
-S left4dead2为您要创建的 screen会话指定一个名称,例如 left4dead2,方便后续管理。
-t l4d2_server为会话内的窗口指定一个名称,例如 l4d2_server。这在配置独立日志时很有用

日志保留

使用Linux的logrotate工具实现日志保留策略

创建日志目录

1
mkdir -p /opt/logs/l4d2

创建logrotate配置文件

1
sudo nano /etc/logrotate.d/l4d2-screen

写入配置内容

1
2
3
4
5
6
7
8
9
/opt/logs/l4d2/l4d2_log_*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}

配置项解释:

  • daily:可以替换为 size 100M来按大小(如100MB)轮转。
  • rotate 7:保留最近7个旧的日志文件。
  • compress:轮转后的旧日志会自动压缩(.gz格式)以节省空间。
  • delaycompress:延迟压缩,方便排查最新一个旧日志的问题。
  • notifempty:如果日志文件为空,则不进行轮转。
  • copytruncate这是最关键的一项。它先复制当前日志文件,然后清空原文件,让 screen继续写入到清空后的文件中,从而避免需要重启 screen会话。

测试配置:

执行以下命令来测试配置是否正确,它会模拟轮转过程但不实际操作。

1
sudo logrotate -d /etc/logrotate.d/l4d2-screen

参考文档

知识来源于AI,我只是AI的实践者