0
我有一个剧本我写来分析我的nginx的日志和电子邮件的结果,是我加入到我的nginx的logrotate的脚本,但它是不工作...logrotate的没有运行prerotate脚本
/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
,它不会通过电子邮件发送给我。
我应该从哪里出发?
alert-mail.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("[email protected]", "secret")
# Create message
msg = MIMEText(sys.argv[2])
msg['Subject'] = sys.argv[1]
msg['From'] = "[email protected]"
msg['To'] = "[email protected]"
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)"
我发布了我的脚本。在编辑帖子之后,我尝试添加警报邮件脚本的完整路径,该脚本是一个也位于我的'/ root/bin'中的python脚本。重要的是要记住nginx-parse脚本可以工作并发送邮件。 ...当logrotate运行时它不会触发 – deltaskelta
您可以粘贴logrotate -v -f /etc/logrotate.d/nginx的日志吗? 你有没有看到任何这样的机会: /root/bin/nginx-parse.sh:第15行:alert-mail:command not found – codeforwin
现在工作。我不确定哪个东西实际上修复了它,但它正在工作。谢谢 – deltaskelta