Не запускается Apache. В логах ошибка: (28)No space left on device...
Описание ситуации
После падения apache он не запускается. В /var/log/httpd/error.log сообщения вида:
[Tue Apr 21 15:50:00 2009] [emerg] (28)No space left on device: Couldn't create accept lock (/var/lock/apache2/accept.lock.19320) (5)
или вида:
[Tue Apr 21 15:50:00 2009] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
При этом в списке процессов apache нет, а команда df показывает, что места на диске предостаточно.
Возможное решение
Довольно редко встречающаяся ошибка, в основном связана с неосвобождением системой семафоров, которые выделяет для себя apache. Выполните команду:
# ipcs -s ------ Массивы семафоров -------- ключ semid владелец права nsems 0x00000000 30572544 apache 600 1 0x00000000 30212097 apache 600 1 0x00000000 30605314 apache 600 1 0x00000000 30638083 apache 600 1 0x00000000 30670852 apache 600 1 0x00000000 30703621 apache 600 1
Если вы видите что-то подобное, то это оно и есть! После того как процесс apache завершился, в системной таблице семафоров остались неосвобождённые семафоры. При попытке стартовать, apache снова хочет выделить семфоры, но операционная система говорит, что свободного место в таблице нет, отсюда и сообщение No space left on device
Ситуацию помогает решить волшебный скрипт чистки семафоров:
#!/bin/bash sems=$(ipcs -s | grep apache | awk --source '/0x0*.*[0-9]* .*/ {print $2}') for sem in $sems do ipcrm sem $sem done
Обратите внимание, что в скрипте используется имя пользователя apache. Если ваш apache запускается от имени другого пользователя, учитывайте это!
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 1256 просмотров