2016-12-12 12 views
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)" 

ответ

1

Я понимаю, что /root/bin/nginx-parse.sh скрипт посылает вам по электронной почте , Когда он запускается из logrotate, убедитесь, что двоичные файлы для таких команд, как почта, имеют полный путь (например,/usr/bin/mail вместо обычной почты). Каково содержимое вашего скрипта? Кроме того, запустите logrotate с флагом -v: logrotate -d -v -f /etc/logrotate.d/nginx

+0

Я разместил свои сценарии. После редактирования сообщения я попытался добавить полный путь к скрипту alert-mail, который является скриптом python, который также находится в моем '/ root/bin'. Важно помнить, что скрипт nginx-parse работает ... и отправляет почту. ... его просто не стреляли при запуске logrotate – deltaskelta

+0

Можете ли вы вставить журнал logrotate -v -f /etc/logrotate.d/nginx? Вы видите что-нибудь подобное: /root/bin/nginx-parse.sh: строка 15: alert-mail: команда не найдена – codeforwin

+0

теперь работает. Я не уверен, какая вещь на самом деле его исправила, но она работает. благодаря – deltaskelta