Správu serverů stíhám zpravidla až o víkendech. V neděli jsem se po snídani podíval na zoubek jednomu neposlušnému serveru s Debianem.
Narůstající log emailového serveru
Jedním "skriptem" si sem-tam zobrazuji statistiku doručených/odeslaných zpráv a jejich poměru ke SPAMu, který přes server projde. jaké bylo moje překvapení, když jsem se dozvěděl o řádově desítce tisíc SPAMů, které server zachytil. Na denní statistiku mi to přišlo docela dost, ale druhým pohledem jsem jednoduše zjistil, že /var/log/mail.log během týdne nabral na váze a obsahuje data za více jak jeden den.
Na vině je v tomto místě logrotate, který (ani nevím proč) přestal rotovat log emailu. Podíval jsem se tedy do souboru /etc/logrotate.conf, v kterém jsem odkomentoval a upravil následující
/var/log/mail.info /var/log/mail.log { missingok daily rotate 7 create compress }
dál zavolal
logrotate -f /etc/logrotate.conf
a logy mail.info a mail.log se smazaly (zálohovaly a posunuly podle pravidel rotování logu). Bohužel Postfix do nich přestal zapisovat.
Segfault ve /var/log/messages
Podíval jsem se do /var/log/messages, kde mě vim upozornil na opakující se řádky vypadající zhruba takto:
Sep 19 08:19:01 obelix kernel: [20704774.629416] cron[30684]: segfault at 0 ip 00000000 sp bfc9cfa4 error 4 in cron[8048000+8000]
Tuto chybu jsem kdysi už viděl, ale její řešení úspěšně zapomněl. Po chvíli hledání na Google, který všechno ví a zná jsem našel pravděpodobnou příčinu plynoucí z aktualizaci a chybějící některé z linkovaných knihoven. Řešení tam bylo také popsané a základní problém spočíval v tom, že nestačí restartovat pouze cron, ale také daemon atd.
/etc/init.d/cron restart /etc/init.d/atd restart
Když o tom teď přemýšlím, tak možná byla výše uvedená "oprava" logrotate zbytečná a zřejmě se ukáže, že za to mohl právě segfaultující cron...
Jak donutit Postfix, aby znovu zapisoval do logu?
Postfix přesto dál odmítal zapisovat do logu, i když emaily přijímal a odesílal zcela korektně. Po dalším hledáním jsem nalezl odpověď i na tento problém, který spočívá někde mezi logovacím daemonem a postfixem. Řešením je vypnutí logovacího daemona, restart postfixu a zapnutí logovacího daemona.
/etc/init.d/sysklogd stop /etc/init.d/postfix restart /etc/init.d/sysklogd start
Dál jsem toho radši nechal a šel leštit motorku..
Jak hromadně přejmenovat přípony souborů?
Před pár týdny jsem přidával nové uživatele počítačové sítě a pomáhal mi při tom awk a makra ve vimu. Kromě toho jsem potřeboval hromadně přejmenovat některé soubory a můj nový správce souborů (Nautilus) si s tím nevěděl rady. Přejmenování souborů s příponou awk na txt se v konzoli provede třeba takto:
for i in *.awk; do mv $i `echo $i | tr awk txt`; done;
Oprava
Předchozí skript je špatně (viz komentáře), nakonec bude nejlepší použít rename.
rename 's/awk$/txt/' *.awk
nebo pokud chceme zdůraznit tečku před příponou souboru, pak raději
rename 's/\.awk$/\.txt/' *.awk
Další info na stránce "How to Bulk Rename Files" ;-)