Apache piped logging
Итак, имеется некоторое количество виртуальных хостов.
Доступ к ним - строго по ftp.
В каталоге каждого хоста лежит его error.log записываемый Apache.
Хочется, используя piped log позволить юзерам безболезненно удалять логи.
Сейчас при удалении лога нужно перезапустить апач, чтобы он пересоздал логи. На это естественно прав у разработчиков нет, а вот большие error.log - не редкость. И разработчик иногда хочет просто удалить лог, а следующее сообщение об ошибке должно создавать новый файл.
Теперь сюрприз - все известные мне программы, а именно штатный rotatelogs, httplog и cronolog так делать не умеют, им все равно нужен рестарт апача, они создают файл один раз - при рестарте апача (он их прибивает, а потом запускает заново).
Внимание, вопрос - где бы достать такую программу, чтобы пересоздавала лог-файл сама, без перезапуска апача.
Раз в 5 минут перестартовать - не предлагать.
- Для комментирования войдите или зарегистрируйтесь
Можно
Можно попробовать поместить необходимые команды после опции
postrotate
в/etc/logrotate.conf
.Например:
Да это я все
Да это я все понимаю, не новичок.
logrotate стартует раз в сутки, апач передергивается. Это и так есть, для архивации access.log - который учитывается централизованно.
А для виртуальных хостов - это типа сервис.
Сценарий хочется быть такой:
Зашел разработчик на модеме по FTP, увидел лог в 10 мегов, удалил его, перегрузил ошибочную страницу и error.log пересоздался, теперь он содержит лишь последние ошибки, и весит несколько Кб.
Сейчас приходиться давать ssh доступ, от чего хотим отказаться.
А может
А может попробовать вариант не с удаление лога, а с его очищением? Ну типа вызывать echo > error.log. Или апач держит файл открытым?
Прочитайте,
Прочитайте, пожалуйста, вопрос... Лог удаляется пользователем произвольно по FTP, никакое echo невозможно.
Проблема
Проблема решилась? У меня та же задача, выхода не знаю..
http://httpd.apache.org/docs/1.3/logs.html
Цитата:
Apache will continue writing to the log file as long as it holds the file open. Instead, the server must be restarted after the log files are moved or deleted so that it will open new log files.
А как бы так сделать, чтобы он не держал открытым файл лога постоянно, а открывал (создавал если не существует) при попытке записи?
Проблема
Проблема решена.
Создаем скрипт /bin/apache_log
#!/bin/sh
#Apache log script by Maxon2oo
while read VAR; do
echo "$VAR" >> $1
done
В httpd.conf вместо
ErrorLog logs/error_log
указываем
ErrorLog "|apache_log /var/log/apache/error_log"