如何创建指向最新旋转日志文件的符号链接



我的应用程序日志文件保持旋转,它有如下模式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

这样我就不需要在打开之前查找当前日志文件是什么,而只需要打开postgresg . log。

所有旋转的日志文件似乎都被压缩了,因此globpostgresql-*.log将展开为感兴趣的日志文件:

ln -sf postgresql-*.log postgres.LOG

如果您希望符号链接在每次创建新日志文件时自动更改,则需要通知。

像这样

#! /bin/bash
log_dir=/your/log/dir
inotifywait -m -e create "$log_dir" | while read -r _dir event file
do
if [[ ! -h "$log_dir/$file" && "$file" =~ .log$ ]]
then
ln -sf "$log_dir/$file" "$log_dir/postgres.LOG"
fi
done

文件名的格式确保使用ls对最新的文件进行最后排序。所以这应该可以工作:

ln -sf $(ls postgresql-*.log | tail -1) postgres.LOG 

相关内容

  • 没有找到相关文章

最新更新