我有 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