You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unix/Linux下创建symlink指向最新PostgreSQL滚动日志

实现PostgreSQL最新日志自动软链接方案

场景说明

应用日志会持续滚动生成,文件名遵循postgresql-yyyy-mm-dd_hhmmss.log命名规则,目录下现有日志文件如下:

-rw-------. 1 root root    331 Jun  1 22:04 postgresql-2022-06-01_220333.log.gz
-rw-------. 1 root root    417 Jun  1 22:04 postgresql-2022-06-01_220430.log.gz
-rw-------. 1 root root    289 Jun  2 19:28 postgresql-2022-06-02_000000.log.gz
-rw-------. 1 root root  26802 Jun  2 19:50 postgresql-2022-06-02_192809.log.gz
-rw-------. 1 root root   8440 Jun  2 23:57 postgresql-2022-06-02_195044.log.gz
-rw-------. 1 root root  15016 Jun  3 11:22 postgresql-2022-06-03_000000.log.gz
-rw-------. 1 root root    291 Jun  3 11:24 postgresql-2022-06-03_112405.log.gz
-rw-------. 1 root root    336 Jun  3 11:25 postgresql-2022-06-03_112553.log.gz
-rw-------. 1 root root    397 Jun  3 11:27 postgresql-2022-06-03_112714.log.gz
-rw-------. 1 root root    358 Jun  3 11:29 postgresql-2022-06-03_112901.log.gz
-rw-------. 1 root root    493 Jun  3 11:30 postgresql-2022-06-03_113031.log.gz
-rw-------. 1 root root    418 Jun  3 11:34 postgresql-2022-06-03_113354.log.gz
-rw-------. 1 root root    419 Jun  3 11:39 postgresql-2022-06-03_113920.log.gz
-rw-------. 1 root root    416 Jun  3 11:44 postgresql-2022-06-03_114437.log.gz
-rw-------. 1 root root    417 Jun  3 11:49 postgresql-2022-06-03_114943.log.gz
-rw-------. 1 root root    419 Jun  3 11:55 postgresql-2022-06-03_115530.log.gz
-rw-------. 1 root root  16961 Jun  3 23:56 postgresql-2022-06-03_120047.log.gz
-rw-------. 1 root root  35470 Jun  4 23:56 postgresql-2022-06-04_000000.log.gz
-rw-------. 1 root root 406059 Jun  5 17:56 postgresql-2022-06-05_000000.log

需要在Unix/Linux环境下实现:日志目录下自动创建软链接,始终指向当前正在写入的最新日志文件,最终效果如下:

postgres.LOG -> postgresql-2022-06-05_000000.log

实现后无需每次执行ls查找最新日志文件名,直接打开postgres.LOG即可查看实时日志内容。

实现脚本

编写轻量shell脚本完成软链接更新,逻辑说明:

  • 已滚动完成的历史日志会被压缩为.gz后缀,正在写入的活跃日志一定是未压缩的.log后缀
  • 日志文件名自带精确到秒的时间戳,按文件名字典序排序取最后一个即为最新日志,比按文件修改时间判断更可靠,不会因为文件属性被误改导致指向错误
  • 软链接更新时强制覆盖,避免已存在链接导致创建失败

脚本内容(保存为update_pg_log_symlink.sh):

#!/bin/bash
# 替换为你的PostgreSQL日志实际存放目录
PG_LOG_DIR="/var/log/postgresql"
SYMLINK_NAME="postgres.LOG"

# 进入日志目录,目录不存在则直接退出
cd "$PG_LOG_DIR" || exit 1

# 查找最新的未压缩日志文件
LATEST_LOG=$(ls -1 postgresql-*.log 2>/dev/null | sort | tail -n 1)

# 没找到日志文件直接退出
if [ -z "$LATEST_LOG" ]; then
    exit 0
fi

# 创建/更新软链接:-n 避免链接指向目录时出现嵌套问题,-f 强制覆盖已存在的链接
ln -snf "$LATEST_LOG" "$SYMLINK_NAME"

使用方式

  • 把脚本中PG_LOG_DIR的值修改为你实际的日志存储路径
  • 给脚本添加执行权限:chmod +x update_pg_log_symlink.sh
  • 手动执行一次脚本,在日志目录下执行ls -l postgres.LOG即可验证软链接是否正确指向最新日志
  • 配置定时任务自动更新:执行crontab -e添加如下行,设置为每分钟执行一次,保证日志滚动后软链接自动更新
* * * * * /你的脚本存放路径/update_pg_log_symlink.sh

内容的提问来源于stack exchange,提问作者kdas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 06:15:44