【问题标题】:logrotate not running prerotate scriptlogrotate 没有运行 prerotate 脚本
【发布时间】:2017-04-26 23:19:35
【问题描述】:

我编写了一个脚本来解析我的 nginx 日志并将结果通过电子邮件发送给我,我将其添加到我的 nginx logrotate 脚本中,但它不起作用...

/var/log/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                /root/bin/nginx-parse.sh
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}

该脚本位于prerotate 部分中,当我以root 用户身份调用它时它可以工作,我相信logrotate 就是这样运行的。

当我运行logrotate -d -f /etc/logrotate.d/nginx 时,我可以看到它没有通过电子邮件向我发送任何内容。

我应该从这里去哪里?

警报邮件.sh.sh:

#!/usr/bin/python
import smtplib
import sys
from email.mime.text import MIMEText

server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login("me@example.com", "secret")

# Create message
msg = MIMEText(sys.argv[2])
msg['Subject'] = sys.argv[1] 
msg['From'] = "me@example.com" 
msg['To'] = "me@example.com"

server.sendmail(msg["From"], [msg["To"]], msg.as_string())
server.quit()

nginx-parse.sh

#!/bin/bash
# For parsing of the nginx logfile and emailing to myself

rm /root/bin/nginx_email.txt
printf "NGINX STATUS CODES\n\n" >> /root/bin/nginx_email.txt
cat /var/log/nginx/access.log | cut -d '"' -f3 | cut -d ' ' -f2 | sort | uniq -c | sort -rn >> /root/bin/nginx_email.txt
printf "\n\n404 URLS\n\n" >> /root/bin/nginx_email.txt
awk '($9 ~ /404/)' /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn  >> /root/bin/nginx_email.txt
printf "\n\n502 URLS\n\n" >> /root/bin/nginx_email.txt
awk '($9 ~ /502/)' /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -r >> /root/bin/nginx_email.txt
printf "\n\nMOST ACCESSES URLS\n\n" >> /root/bin/nginx_email.txt
awk -F\" '{print $2}' /var/log/nginx/access.log | awk '{print $2}' | sort | uniq -c | sort -rg | head -n 50 >> /root/bin/nginx_email.txt

#Sending the email using the python script I wrote
alert-mail "NGINX PARSING" "$(cat /root/bin/nginx_email.txt)"

【问题讨论】:

    标签: linux bash cron logrotate


    【解决方案1】:

    我了解 /root/bin/nginx-parse.sh 脚本会向您发送电子邮件。当它从 logrotate 运行时,确保像 mail 这样的命令的二进制文件具有完整路径(例如 /usr/bin/mail 而不仅仅是 mail)。你的脚本的内容是什么?此外,使用 -v 标志运行 logrotate:logrotate -d -v -f /etc/logrotate.d/nginx

    【讨论】:

    • 我发布了我的脚本。编辑帖子后,我尝试将完整路径添加到警报邮件脚本,这是一个 python 脚本,也在我的/root/bin 中重要的是要记住 nginx-parse 脚本工作......并发送邮件......它只是在 logrotate 运行时没有触发
    • 能贴一下 logrotate -v -f /etc/logrotate.d/nginx 的日志吗?你有没有机会看到这样的东西:/root/bin/nginx-parse.sh: line 15: alert-mail: command not found
    • 它现在可以工作了。我不确定哪个东西实际上修复了它,但它正在工作。谢谢
    猜你喜欢
    • 2018-01-05
    • 2019-09-13
    • 2012-10-19
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2015-02-16
    • 2018-04-09
    相关资源
    最近更新 更多