Odpowiedzi:
Jeśli jądro zabije proces (ponieważ w systemie zabrakło pamięci), pojawi się komunikat dziennika jądra. Zaewidencjonuj /var/log/kern.log
(w Debianie / Ubuntu inne dystrybucje mogą wysyłać dzienniki jądra do innego pliku, ale zwykle /var/log
pod Linuksem).
Zauważ, że jeśli OOM-killer (out-of-memory killer) został uruchomiony, oznacza to, że nie masz wystarczającej ilości pamięci wirtualnej. Dodaj więcej wymiany (lub więcej pamięci RAM).
Niektóre awarie procesu są również rejestrowane w dziennikach jądra (np. Błędy segmentacji).
Jeśli procesy zostały uruchomione z crona, powinieneś mieć wiadomość z komunikatami o błędach. Jeśli procesy zostały uruchomione z powłoki w terminalu, sprawdź błędy w tym terminalu. Uruchom proces, screen
aby rano zobaczyć terminal. Może to nie pomóc, jeśli OOM-killer się uruchomi, ponieważ mógł zabić również proces cron lub screen; ale jeśli natknąłeś się na zabójcę OOM, to musisz rozwiązać ten problem.
Rachunkowość procesów może tutaj pomóc.
W skrócie:
apt-get install acct
Następnie wypróbuj polecenia takie jak:
lastcomm
sa
lub na Ubuntu:
lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct
Widzieć:
AKTUALIZACJA
Co dziwne, pacct
plik zawiera informacje o statusie wyjścia, ale ani lastcomm
nie sa
wydaje się, aby go wydrukować.
O ile widzę, musisz napisać własny program C, aby uzyskać dostęp do informacji.
AKTUALIZACJA 2
Oto wersja, która drukuje kod wyjścia.
Ostatnie dwa pola to „S” dla sygnalizacji i „E” dla wyjścia, a następnie numer sygnału lub status wyjścia.
Więc w twoim przypadku prawdopodobnie szukasz „S 15”, co oznacza, że ma SIGTERM.
sleep X mikel stdin 0.00 secs Fri Mar 25 20:15 S 15
W porównaniu do „E 0”, co oznacza, że proces zakończył się bez błędu.
true mikel stdin 0.00 secs Fri Mar 25 20:16 E 0
Tylko minimalnie przetestowane.
usługa sudo - status-all
To polecenie powie Ci, jakie usługi są obecnie uruchomione, a które nie zostały uruchomione ani zatrzymane.
/var/log/kern.log
?