J'ai créé un truc pour voir les logs irc en public. L'adresse est actuellement à
http://khaganat.net/irc/log.phpLa page php m'a presque pas donné de fil à retordre. Presque ! C'est basique et ça semble marcher. Ça pointe vers des fichiers de logs brut ; c'est pas très beau mais franchement arriver là n'a déjà pas été simple...
Je demande confirmation sur mes scripts avant de tout mettre en place.
en faisant
crontab -e, il faudrait que j'ajoute ces lignes :
01 01 * * * /home/khaganat/www/irc/cplog.sh
5,15,25,35,45,55 * * * * /home/khaganat/www/irc/cplogday.sh
Ce sont les liens vers mes deux scripts. Le premier permet de s'assurer qu'il y a bien copie du log de la veille, et vire celui qui a plus de 8 jours. Il s'execute tous les jours à 1h01. Le second met à jour le log du jour toute les dix minutes.
Voici le script du premier (donc, qui veille à ce qu'on ait les 7 fichiers de log consultables) :
#!/bin/bash
#Copie et détruit les logs d'eggdrop vers www/irc/log afin d'en rendre la consultation publique, mais uniquement sur la semaine. Un second script,cplogday.sh, met à jour toutes les 10 min celui du jour. Tout ça est géré par cron.
#On récupère les variables pour le fichier de la veille à copier
day=$(date -d "1 days ago" +'%d')
year=$(date '+%Y')
mo=$(date '+%m')
#Suivant le mois (variable $m) retranscription en mode anglais, comme dans la notation des logs.
case $mo in
01)
m="Jan"
;;
02)
m="Feb"
;;
03)
m="Mar"
;;
04)
m="Apr"
;;
05)
m="May"
;;
06)
m="Jun"
;;
07)
m="Jul"
;;
08)
m="Aug"
;;
09)
m="Sep"
;;
10)
m="Oct"
;;
11)
m="Nov"
;;
12)
m="Dec"
;;
esac
#on se fait une jolie variable qui imite le nom des fichiers de log
log=$day$m$year
#On copie le fichier de la veille, avec chemin complet pour éviter les erreurs.
cp /home/khaganat/eggdrop/logs/khanat.log.$log /home/khaganat/www/irc/logs/khanat.log.$log
#Fichiers qu'il faudra effacer, avec chemin complet
logdel='/home/khaganat/www/irc/logs/*'
#On supprime celui qui date d'il y a plus de 7 jours. 8, pour la marge.
find $logdel -type f -mtime +7 -exec /bin/rm -f {} \;
Le second script, pour avoir le log mis à jour toutes les 10 minutes
#!/bin/bash
#Copie le log du jour d'eggdrop vers www/irc/log afin d'en rendre la consultation publique, toutes les 10 minutes. Un second script,cplog.sh, colle le log de la veille, puis efface celui d'il y a 7 jours. Tout ça est géré par cron.
#On récupère les variables pour le fichier de la veille à copier
day=$(date +'%d')
year=$(date '+%Y')
mo=$(date '+%m')
#Suivant le mois (variable $m) retranscription en mode anglais, comme dans la notation des logs.
case $mo in
01)
m="Jan"
;;
02)
m="Feb"
;;
03)
m="Mar"
;;
04)
m="Apr"
;;
05)
m="May"
;;
06)
m="Jun"
;;
07)
m="Jul"
;;
08)
m="Aug"
;;
09)
m="Sep"
;;
10)
m="Oct"
;;
11)
m="Nov"
;;
12)
m="Dec"
;;
esac
#on se fait une jolie variable qui imite le nom des fichiers de log
log=$day$m$year
#On copie le fichier du jour, avec chemin complet pour éviter les erreurs.
cp /home/khaganat/eggdrop/logs/khanat.log.$log /home/khaganat/www/irc/logs/khanat.log.$log
C'est redondant que je copie celui de la veille, alors qu'il est sans doute à jour vu que l'autre script le met à jour toutes les 10 minutes, mais comme ça je suis sûre.
Je ne sais pas si c'est mieux de faire deux fichiers, ou si je pourrais y rassembler dans un seul sans que ça demande plus de ressources ; celui du jour s'épargne surtout la commande pour enlever les fichiers de plus de 8 jours et la copie bis du fichier de la veille. Mais c'est peut-être mieux de ne pas refaire ça toutes les 10 minutes.
Pour info, pendorid met à jour les archives de log toutes les 10 minutes, 5 minutes avant mon propre cron.
Actuellement le cron n'est pas en place, donc je lance les scripts à la main pour les tests (et jusque là tout va bien) ; j'attends la lecture de tout ça par les experts avant de valider.