Systemd logrotate 到特定文件夹

Systemd logrotate 到特定文件夹

我有 systemd 服务文件,它运行 guncorn 应用程序,并将日志生成到特定文件夹,但我想为服务文件创建一个 logrotate,该文件每天生成我的日志并根据日期创建单独的文件夹。例如:master_std_err_dd-mm-yyyy.log

这是我的 Systemd 服务:

[Unit]
Description=master daemon
After=network.target

[Service]
WorkingDirectory=/home/ubuntu/master
User=ubuntu
Group=ubuntu
Environment="PYTHONPATH=/home/ubuntu/venv"
ExecStart=/home/ubuntu/venv/bin/gunicorn -b 127.0.0.1:8000 app:app
StandardOutput=file:/home/ubuntu/logs/master_std_out.log
StandardError=file:/home/ubuntu/logs/master_std_err.log
KillMode=process
Restart=always
TimeoutSec=infinity
RestartPreventExitStatus=255

[Install]
WantedBy=multi-user.target
Alias=master.service

此文件生成我的日志/home/ubuntu/logs/master_std_err.log

但我想为这个文件创建一个特定的文件夹,并按每天按日期分开。

/home/ubuntu/logs/master_std_out.log {
    daily
    create 644 root root
    rotate 12
    dateext
    dateformat -%d%m%Y
    postrotate
        echo "A rotation just took place." | mail root
    endscript
}

我已经创建了 logrotate conf,但它没有创建任何日志。

答案1

要将日志轮换到不同的目录,您需要olddir在 logrotate 配置中使用:

旧目录 目录

日志被移入目录用于旋转。 目录 必须与正在轮换的日志文件位于同一物理设备上,除非复制复制截断或者 重命名复制 选项。 目录除非指定了绝对路径名,否则假定相对于保存日志文件的目录。使用此选项时,所有旧版本的日志最终都会位于目录。此选项可能会被覆盖旧目录选项。


我已经创建了 logrotate conf,但它没有创建任何日志。

如果您运行logrotate -d _filename_,logrotate 将在调试模式下处理文件,告诉您它做出决定的原因,因此您通常可以看到文件未旋转的原因。在调试模式下不会进行实际旋转,因此可以安全地根据需要多次运行以使您的配置正常工作。或者,如果您希望它执行实际旋转,同时还告诉您它在做什么以及为什么,您可以使用-v而不是。-d

相关内容