Czy zdarzyło się Wam przypadkiem usunąć plik loga pracującej aplikacji? Jeśli tak, ale daemon tej aplikacji wciąż pracuje, to można go przywrócić. Pokażę to na przykładzie.
Apache uruchomiony testowo na moim desktopie loguje do trzech poniższych plików:
root@impact:~# ls -l /var/log/apache2/*.log
-rw-r----- 1 root adm 1008 2010-03-19 16:17 /var/log/apache2/access.log
-rw-r----- 1 root adm 998 2010-03-19 16:17 /var/log/apache2/error.log
-rw-r--r-- 1 root root 0 2009-11-25 13:53 /var/log/apache2/other_vhosts_access.log
Usuwam np. plik access.log:
root@impact:~# rm -v /var/log/apache2/access.log
usunięty `/var/log/apache2/access.log'
1. Szukam głównego PID'a procesu Apache:
root@impact:~# ps -ef | grep apache
root 3323 1 0 Mar17 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 3324 3323 0 Mar17 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 3327 3323 0 Mar17 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 24579 3323 0 08:13 ? 00:00:00 /usr/sbin/apache2 -k start
2. Sprawdzam deskryptory plików dla tego PID'a:
root@impact:~# ls -l /proc/3323/fd/ | grep apache
l-wx------ 1 root root 64 2010-03-19 23:37 2 -> /var/log/apache2/error.log
l-wx------ 1 root root 64 2010-03-19 23:37 7 -> /var/log/apache2/other_vhosts_access.log
l-wx------ 1 root root 64 2010-03-19 23:37 8 -> /var/log/apache2/access.log (deleted)
3. Przepisuję plik z deskryptora do pliku loga (można użyć również cp albo dd):
root@impact:~# cat /proc/3323/fd/8 > /var/log/apache2/access.log
I już skasowany plik jest na "swoim miejscu":
root@impact:~# ls -l /var/log/apache2/*.log
-rw-r--r-- 1 root root 1008 2010-03-19 23:40 /var/log/apache2/access.log
-rw-r----- 1 root adm 998 2010-03-19 16:17 /var/log/apache2/error.log
-rw-r--r-- 1 root root 0 2009-11-25 13:53 /var/log/apache2/other_vhosts_access.log
Warto pod koniec wspomnieć, że usunięcie plików logów na partycji z kończącym się miejscem nie zawsze oznacza faktyczne zwolnienie miejsca, jeśli deskryptory tych plików są nadal otwarte. Ale to już jeden z tematów na inny artykuł. :-)