Я обнаружил, что существует программа, которая регулярно убивала мой Apache, согласно информации журнала, я понимаю, что существует программа, использующая «/etc/init.d/apache2 stop», чтобы остановить apache, поскольку этот процесс ушел, как я могу узнать, какой программе принадлежит этот PID?
journalctl -o verbose _PID=16630
-- Logs begin at Thu 2021-10-28...
[s=b8b9ba8c0b3a434ab134b8e39ad9a421;...]
SYSLOG_FACILITY=3
PRIORITY=6
_UID=0
_GID=0
_SYSTEMD_SLICE=system.slice
_BOOT_ID=dac5e28c70d04920ad8b140efa
_MACHINE_ID=b66fd2c1b04547d4b1471c0e
_HOSTNAME=server
_CAP_EFFECTIVE=3fffffffff
_TRANSPORT=stdout
_CMDLINE=/bin/sh /etc/init.d/apache2 stop
_EXE=/bin/dash
SYSLOG_IDENTIFIER=apache2
_COMM=apache2
_SYSTEMD_UNIT=apache2.service
MESSAGE= * Stopping Apache httpd web server apache2
Вы должны проверить dmesg
вывод ядра. Вероятным виновником является обработчик ядра Out-Of-Memory, который берет процесс и завершает его при нехватке системной памяти.
Это событие регистрируется в журнале ядра, показанном dmesg
.
После завершения процесса вся информация о нем исчезает, за исключением того, что было зарегистрировано во время его работы. Бег. Информация, которую вы ищете (какая команда выполнялась с этим PID), просто больше не существует.
Ваш единственный шанс — регистрировать информацию, пока процесс еще запущен.
Если вы уверены, что убийство происходит при выполнении команды /etc/init.d/apache2 stop
, то одним из способов может быть добавление ведения журнала в сценарий /etc/init.d/apache2
. ].
Простая вставка строки вроде
/bin/ps axf >> /tmp/apachekillertracker.log
где-нибудь в начале скрипта может уже помочь, поскольку дерево процессов будет сбрасываться в /tmp/apachekillertracker.log
каждый раз /etc/init. d/apache2
запускается для проверки позже.
Если выясняется, что убийство не выполняется через /etc/init.d/apache2
, в конце концов, вы можете заглянуть в учет процессов, чтобы узнать, что выполнялось в момент убийства.