Thank you for reading this post, don't forget to subscribe!
не запущен сервер:
netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22278/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 535/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1400/sendmail
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1347/mysqld
tcp 0 0 :::22
смотрим статус:
/etc/init.d/httpd status
httpd dead but pid file exists
можно попробовать удалить PID файл и перезапустить apache
rm -f /var/run/httpd/httpd.pid
в моём случае это не помогло,
смотрим лог apache
tail -1 /var/log/httpd/error_log
[Sun Apr 08 13:17:02 2018] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.17084) (5)
# ipcs -sl
------ Пределы семафоров --------
максимальное количество массивов = 128
максимум семафоров на массив = 250
максимум семафоров на всю систему = 32000
максимум операций на вызов семафора = 32
максимальное значение семафора = 32767
Видим, что максимальное количество массивов = 128.
Теперь посмотрим, сколько же используется в данный момент:
ipcs -su
------ Semaphore Status --------
used arrays = 128
allocated semaphores = 128
А вот все эти семафоры (Обычно в третьей колонке пишется имя пользователя от которого работает Apache2, но в данном случае было записано непонятное значение 4294967295, но это не суть):
Для решения данной проблемы, нужно очистить данные массивы семафоров:
cat sems.sh
#!/bin/bash
sems=$(ipcs -s | grep 4294967295 | awk --source '/0x0*.*[0-9]* .*/ {print $2}')
for sem in $sems
do
ipcrm sem $sem
done
В команде grep нужно указать значение третьей колонки (чистить семафоры root'a лучше не стоит).
Либо однострочник:
for i in `ipcs -s | awk '/httpd/ {print $2}'`; do (ipcrm -s $i); done
ещё вариант:
ipcs -s | grep nobody | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'