linux: come trovare i file di log di un demone
Per risolvere situazioni problematiche su una macchina è necessario per prima cosa analizzare i log disponibili, ma in alcuni casi non si è sicuri quali siano i file utilizzati.
Su Linux è possibile utilizzare gli strumenti messi a disposizione dal
filesystem virtuale /proc
: per esempio se vogliamo sapere quali file ha
aperto una istanza di apache2 possiamo usare la directory dei file descriptor
relativi al processo che ci interessa (in questo caso 1909
)
# tree -l /proc/1909/fd /proc/1909/fd ├── 0 -> /dev/null ├── 1 -> /dev/null ├── 2 -> /var/log/apache2/error.log ├── 3 -> socket:[1412228] ├── 4 -> socket:[1412229] ├── 5 -> pipe:[1412241] ├── 6 -> pipe:[1412241] ├── 7 -> /var/log/apache2/other_vhosts_access.log └── 8 -> /var/log/apache2/access.log
Così si scopre che lo stderr
finisce in error log; per scoprire
effettivamente le caratteristiche dei socket e delle pipe è possibile fare una
ricerca più approfondita con il comando lsof(1)
(di cui ne riporto solo una
porzione)
# lsof -p 1909 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ... apache2 1909 root 0r CHR 1,3 0t0 550 /dev/null apache2 1909 root 1w CHR 1,3 0t0 550 /dev/null apache2 1909 root 2w REG 8,1 140 3164665 /var/log/apache2/error.log apache2 1909 root 3u sock 0,6 0t0 1412228 can't identify protocol apache2 1909 root 4u IPv6 1412229 0t0 TCP *:www (LISTEN) apache2 1909 root 5r FIFO 0,8 0t0 1412241 pipe apache2 1909 root 6w FIFO 0,8 0t0 1412241 pipe apache2 1909 root 7w REG 8,1 0 3165100 /var/log/apache2/other_vhosts_access.log apache2 1909 root 8w REG 8,1 0 3164641 /var/log/apache2/access.log
Sfortunatamente questo non esaurisce tutte le possibilità: il demone che si
occupa dei log di sistema è syslog
(oppure rsyslog
) e viene chiamato
solo quando si necessita e quindi non risulta un socket/file collegato da
apache2
ad esso; per scoprire se effettivamente lo chiama è possibile fare
una analisi statica del binario molto grezza
# nm -D `which apache2` | grep log U __syslog_chk ... U openlog
openlog(3)
è proprio la chiamata per aprire una connessione al logger di sistema.
Comments
Comments powered by Disqus