Я использую Ubuntu 14.04. У меня есть следующее в файле /etc/logrotate.conf ...
/home/rails/myproject/log {
daily
rotate 3
compress
delaycompress
missingok
notifempty
create 644 rails rails
}
/var/log/postgresql {
daily
rotate 3
compress
delaycompress
missingok
notifempty
create 644 root root
}
Каждую ночь я смотрел на свои журналы с рельсами, и это всегда было бы больше - то есть это не казалось как журналы были повернуты ...
myuser@myproject:~$ ls -al /home/rails/myproject/log
total 4574368
drwxr-xr-x 2 rails rails 4096 May 30 12:04 .
drwxr-xr-x 15 rails rails 4096 May 30 12:03 ..
-rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log
-rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep
-rw-r--r-- 1 rails rails 4523480004 Jun 22 10:19 production.log
-rw-rw-r-- 1 rails rails 156358087 Jun 22 10:19 sidekiq.log
-rw-rw-r-- 1 rails rails 54246 Apr 10 14:34 test.log
Когда я запускаю команду вручную, я вижу, что некоторые из журналов кажутся поворотными ...
myuser@myproject:~$ sudo logrotate /etc/logrotate.conf
myuser@myproject:~$ ls -al /home/rails/myproject/log
total 4570288
drwxr-xr-x 2 rails rails 4096 Jun 22 10:22 .
drwxr-xr-x 15 rails rails 4096 May 30 12:03 ..
-rw-rw-r-- 1 rails rails 0 Jun 22 10:22 development.log
-rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log.1
-rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep
-rw-r--r-- 1 rails rails 0 Jun 22 10:22 production.log
-rw-r--r-- 1 rails rails 4523505906 Jun 22 10:23 production.log.1
-rw-rw-r-- 1 rails rails 156369048 Jun 22 10:23 sidekiq.log
-rw-rw-r-- 1 rails rails 54246 Apr 10 14:34 test.log
Как мне понять, почему мои рельсовые журналы не вращаются ночью? Обратите внимание, что другие журналы в системе выглядят. Выше, я включил мою настройку postgres, и когда я смотрю на журналы там, кажется, что они нормально вращаются ...
myuser@myproject:~$ ls -al /var/log/postgresql
total 1832
drwxrwxr-t 2 root postgres 4096 May 2 20:42 .
drwxr-xr-x 13 root root 4096 Jun 22 10:22 ..
-rw-r----- 1 postgres adm 1861361 Jun 22 10:14 postgresql-9.6-main.log
Спасибо, - Дейв
Редактирование: установка конфигурация в отдельном файле, похоже, ничего не сделала. Ниже приведена моя конфигурация, а также журналы, которые, похоже, не вращаются ...
myuser@myapp:~$ sudo cat /etc/logrotate.d/myapp
[sudo] password for myuser:
/home/rails/myapp/log/*.log {
daily
missingok
compress
notifempty
rotate 12
create
delaycompress
missingok
su rails rails
}
Вот журналы. Кажется, ничего не случилось ...
myuser@myapp:~$ ls -al /home/rails/myapp/log
total 4635956
drwxr-xr-x 2 rails rails 4096 Jun 22 10:22 .
drwxr-xr-x 15 rails rails 4096 May 30 12:03 ..
-rw-rw-r-- 1 rails rails 0 Jun 22 10:22 development.log
-rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log.1
-rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep
-rw-r--r-- 1 rails rails 0 Jun 22 10:22 production.log
-rw-r--r-- 1 rails rails 4546785231 Jun 24 12:12 production.log.1
-rw-rw-r-- 1 rails rails 200336693 Jun 24 12:51 sidekiq.log
-rw-rw-r-- 1 rails rails 54246 Apr 10 14:34 test.log
Задача Logrotate - перемещать (переименовывать) и сжимать файлы. Вы сконфигурировали его в этом случае, чтобы переименовать и сжать файлы журнала Rails, а затем создать новые с исходными именами.
Имена файлов - это способ поиска файла, но фактический файл - это просто некоторые пространство на диске. Файл может иметь несколько имен (жестких ссылок) или без имен (вы можете rm открыть файл, но он по-прежнему занимает место на диске, пока файл открыт в некотором процессе).
[d2 ] Проблема, с которой вам кажется, заключается в том, что приложение Rails уже открыло файл, когда оно переименовано. Регистратор Rails не замечает изменения имени, потому что он использует имя один раз, чтобы открыть файл, а затем полностью перестало заботиться о его имени.Вы должны убедить его закрыть и повторно открыть файлы журнала, используя их имена снова, то есть он начнет писать новые пустые, которые теперь имеют
Если вы посмотрите в /etc/logrotate.d, вы увидите много примеров этого, в зависимости от того, что вы установили.
[d5 ] Например, rsyslog имеет:postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
stunnel имеет:
postrotate
/etc/init.d/stunnel4 reopen-logs > /dev/null
endscript
Это скрипты, чтобы сообщить соответствующему процессу, что файл нуждается в повторном открытии. Конкретный механизм зависит от программы, но то, что это имеет тенденцию делать, - это отправить HUP (или иногда USR1) (см. [F9]), которые длительные процессы принимают как инструкцию для закрытия и повторного открытия logfiles.
В случае с Rails способ его изменения зависит от того, какой логгер вы используете. Я только что видел несколько советов, предполагающих, что вы должны использовать copytruncate, который в основном является «чит-вариантом» в logrotate, говорящим, что он вручную копирует содержимое и пуст файл, а не перемещает его и создает новый. (см. man logrotate.conf). Это используется вместо create следующим образом:
/home/rails/myapp/log/*.log {
daily
missingok
compress
notifempty
rotate 12
copytruncate
delaycompress
missingok
su rails rails
}
Это не отличное решение, поскольку оно буквально копирует весь файл (чтобы создать его снимок как есть) перед удалением его содержимого , что довольно неэффективно.
Однако, если вы используете Unicorn для запуска вашего приложения (которое мультиплексирует запросы через кучу идентичных рабочих процессов Rails), он поддерживает сигнал USR1 как обычно (убивая и заменяя все рабочие, что фактически заставляет их повторно открывать файлы), и вы можете просто отправить его в postrotate с помощью pkill или аналогичного, возможно, так:
/home/rails/myapp/log/*.log {
daily
missingok
compress
notifempty
rotate 12
create
delaycompress
missingok
su rails rails
postrotate
pkill -USR1 -u rails unicorn
endscript
}
pkill - это инструмент для искать запущенные процессы и отправлять им сигналы, так что это найдет все с именем unicorn, запущенным как пользователь rails, и отправит ему сигнал USR1, который сообщает ему повторно открыть файлы журнала. (Примеры, которые я дал из файлов Ubuntu пакетов /etc/logrotate.d, фактически делают то же самое, но эти службы имеют поиск, скрытый в функциях в их сценариях /etc/init.d.)
Я уверен, что быть каким-то образом настроить разумную postrotate для любой настройки Rails, которую вы получили (в худшем и простом случае, просто перезапустите ее), но, надеюсь, это объясняет все стороны Ubuntu ...
Задача Logrotate - перемещать (переименовывать) и сжимать файлы. Вы сконфигурировали его в этом случае, чтобы переименовать и сжать файлы журнала Rails, а затем создать новые с исходными именами.
Имена файлов - это способ поиска файла, но фактический файл - это просто некоторые пространство на диске. Файл может иметь несколько имен (жестких ссылок) или без имен (вы можете rm открыть файл, но он по-прежнему занимает место на диске, пока файл открыт в некотором процессе).
Проблема, с которой вам кажется, заключается в том, что приложение Rails уже открыло файл, когда оно переименовано. Регистратор Rails не замечает изменения имени, потому что он использует имя один раз, чтобы открыть файл, а затем полностью перестало заботиться о его имени.
Вы должны убедить его закрыть и повторно открыть файлы журнала, используя их имена снова, то есть он начнет писать новые пустые, которые теперь имеют
Если вы посмотрите в /etc/logrotate.d, вы увидите много примеров этого, в зависимости от того, что вы установили.
Например, rsyslog имеет:
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
stunnel имеет:
postrotate
/etc/init.d/stunnel4 reopen-logs > /dev/null
endscript
Это скрипты, чтобы сообщить соответствующему процессу, что файл нуждается в повторном открытии. Конкретный механизм зависит от программы, но то, что это имеет тенденцию делать, - это отправить HUP (или иногда USR1) (см. [F9]), которые длительные процессы принимают как инструкцию для закрытия и повторного открытия logfiles.
В случае с Rails способ его изменения зависит от того, какой логгер вы используете. Я только что видел несколько советов, предполагающих, что вы должны использовать copytruncate, который в основном является «чит-вариантом» в logrotate, говорящим, что он вручную копирует содержимое и пуст файл, а не перемещает его и создает новый. (см. man logrotate.conf). Это используется вместо create следующим образом:
/home/rails/myapp/log/*.log {
daily
missingok
compress
notifempty
rotate 12
copytruncate
delaycompress
missingok
su rails rails
}
Это не отличное решение, поскольку оно буквально копирует весь файл (чтобы создать его снимок как есть) перед удалением его содержимого , что довольно неэффективно.
Однако, если вы используете Unicorn для запуска вашего приложения (которое мультиплексирует запросы через кучу идентичных рабочих процессов Rails), он поддерживает сигнал USR1 как обычно (убивая и заменяя все рабочие, что фактически заставляет их повторно открывать файлы), и вы можете просто отправить его в postrotate с помощью pkill или аналогичного, возможно, так:
/home/rails/myapp/log/*.log {
daily
missingok
compress
notifempty
rotate 12
create
delaycompress
missingok
su rails rails
postrotate
pkill -USR1 -u rails unicorn
endscript
}
pkill - это инструмент для искать запущенные процессы и отправлять им сигналы, так что это найдет все с именем unicorn, запущенным как пользователь rails, и отправит ему сигнал USR1, который сообщает ему повторно открыть файлы журнала. (Примеры, которые я дал из файлов Ubuntu пакетов /etc/logrotate.d, фактически делают то же самое, но эти службы имеют поиск, скрытый в функциях в их сценариях /etc/init.d.)
Я уверен, что быть каким-то образом настроить разумную postrotate для любой настройки Rails, которую вы получили (в худшем и простом случае, просто перезапустите ее), но, надеюсь, это объясняет все стороны Ubuntu ...
Задача Logrotate - перемещать (переименовывать) и сжимать файлы. Вы сконфигурировали его в этом случае, чтобы переименовать и сжать файлы журнала Rails, а затем создать новые с исходными именами.
Имена файлов - это способ поиска файла, но фактический файл - это просто некоторые пространство на диске. Файл может иметь несколько имен (жестких ссылок) или без имен (вы можете rm открыть файл, но он по-прежнему занимает место на диске, пока файл открыт в некотором процессе).
Проблема, с которой вам кажется, заключается в том, что приложение Rails уже открыло файл, когда оно переименовано. Регистратор Rails не замечает изменения имени, потому что он использует имя один раз, чтобы открыть файл, а затем полностью перестало заботиться о его имени.
Вы должны убедить его закрыть и повторно открыть файлы журнала, используя их имена снова, то есть он начнет писать новые пустые, которые теперь имеют
Если вы посмотрите в /etc/logrotate.d, вы увидите много примеров этого, в зависимости от того, что вы установили.
Например, rsyslog имеет:
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
stunnel имеет:
postrotate
/etc/init.d/stunnel4 reopen-logs > /dev/null
endscript
Это скрипты, чтобы сообщить соответствующему процессу, что файл нуждается в повторном открытии. Конкретный механизм зависит от программы, но то, что это имеет тенденцию делать, - это отправить HUP (или иногда USR1) (см. [F9]), которые длительные процессы принимают как инструкцию для закрытия и повторного открытия logfiles.
В случае с Rails способ его изменения зависит от того, какой логгер вы используете. Я только что видел несколько советов, предполагающих, что вы должны использовать copytruncate, который в основном является «чит-вариантом» в logrotate, говорящим, что он вручную копирует содержимое и пуст файл, а не перемещает его и создает новый. (см. man logrotate.conf). Это используется вместо create следующим образом:
/home/rails/myapp/log/*.log {
daily
missingok
compress
notifempty
rotate 12
copytruncate
delaycompress
missingok
su rails rails
}
Это не отличное решение, поскольку оно буквально копирует весь файл (чтобы создать его снимок как есть) перед удалением его содержимого , что довольно неэффективно.
Однако, если вы используете Unicorn для запуска вашего приложения (которое мультиплексирует запросы через кучу идентичных рабочих процессов Rails), он поддерживает сигнал USR1 как обычно (убивая и заменяя все рабочие, что фактически заставляет их повторно открывать файлы), и вы можете просто отправить его в postrotate с помощью pkill или аналогичного, возможно, так:
/home/rails/myapp/log/*.log {
daily
missingok
compress
notifempty
rotate 12
create
delaycompress
missingok
su rails rails
postrotate
pkill -USR1 -u rails unicorn
endscript
}
pkill - это инструмент для искать запущенные процессы и отправлять им сигналы, так что это найдет все с именем unicorn, запущенным как пользователь rails, и отправит ему сигнал USR1, который сообщает ему повторно открыть файлы журнала. (Примеры, которые я дал из файлов Ubuntu пакетов /etc/logrotate.d, фактически делают то же самое, но эти службы имеют поиск, скрытый в функциях в их сценариях /etc/init.d.)
Я уверен, что быть каким-то образом настроить разумную postrotate для любой настройки Rails, которую вы получили (в худшем и простом случае, просто перезапустите ее), но, надеюсь, это объясняет все стороны Ubuntu ...
Похоже, проблема сводится к тому, что вы указываете каталог для вращения файла вместо фактических имен файлов.
Чтобы повернуть все файлы с расширением .log в вашем каталоге /home/rails/myproject/log, вы можете использовать следующую строку вместо первой строки ваша конфигурация:
/home/rails/myproject/log/*.log {
и аналогично в конфигурации каталога postgres
/var/log/postgresql/*.log {
Можно использовать подстановочный символ * без расширения .log, чтобы повернуть все файлы (за исключением скрытых, начиная с .) в вашем каталоге postgresql, но я предпочитаю добавленный элемент управления только для указания файлов .log:
/var/log/postgresql/* {
. В качестве примечания обратите внимание на то, как вы создайте новые версии файла журнала с помощью logrotate, если вы создадите новый журнал postgresql с 644 восьмеричными разрешениями, принадлежащими пользователю root, тогда пользователь postgres не сможет записать в новый файл журнала.
Проверьте статус в /var/lib/logrotate/status, если вы видите какие-либо проблемы
Пожалуйста, проверьте разрешения и права собственности на файлы в /etc/logrotate.d корневом владельце и режиме разрешения 644. фрагмент кода для logrotate:
/home/rails/myapp/log/*.log {
rotate 12
daily
missingok
compress
notifempty
create 640 rails rails
delaycompress
missingok
}
проверять вывод logrotate вручную с помощью --verbose Если вам требуется логротация более чем для определенного размера, вы можете поэкспериментировать с параметрами maxsize и size в файле конфигурации logrotate
Похоже, проблема сводится к тому, что вы указываете каталог для вращения файла вместо фактических имен файлов.
Чтобы повернуть все файлы с расширением .log в вашем каталоге /home/rails/myproject/log, вы можете использовать следующую строку вместо первой строки ваша конфигурация:
/home/rails/myproject/log/*.log {
и аналогично в конфигурации каталога postgres
/var/log/postgresql/*.log {
Можно использовать подстановочный символ * без расширения .log, чтобы повернуть все файлы (за исключением скрытых, начиная с .) в вашем каталоге postgresql, но я предпочитаю добавленный элемент управления только для указания файлов .log:
/var/log/postgresql/* {
. В качестве примечания обратите внимание на то, как вы создайте новые версии файла журнала с помощью logrotate, если вы создадите новый журнал postgresql с 644 восьмеричными разрешениями, принадлежащими пользователю root, тогда пользователь postgres не сможет записать в новый файл журнала.
Проверьте статус в /var/lib/logrotate/status, если вы видите какие-либо проблемы
Пожалуйста, проверьте разрешения и права собственности на файлы в /etc/logrotate.d корневом владельце и режиме разрешения 644. фрагмент кода для logrotate:
/home/rails/myapp/log/*.log {
rotate 12
daily
missingok
compress
notifempty
create 640 rails rails
delaycompress
missingok
}
проверять вывод logrotate вручную с помощью --verbose Если вам требуется логротация более чем для определенного размера, вы можете поэкспериментировать с параметрами maxsize и size в файле конфигурации logrotate
Похоже, проблема сводится к тому, что вы указываете каталог для вращения файла вместо фактических имен файлов.
Чтобы повернуть все файлы с расширением .log в вашем каталоге /home/rails/myproject/log, вы можете использовать следующую строку вместо первой строки ваша конфигурация:
/home/rails/myproject/log/*.log {
и аналогично в конфигурации каталога postgres
/var/log/postgresql/*.log {
Можно использовать подстановочный символ * без расширения .log, чтобы повернуть все файлы (за исключением скрытых, начиная с .) в вашем каталоге postgresql, но я предпочитаю добавленный элемент управления только для указания файлов .log:
/var/log/postgresql/* {
. В качестве примечания обратите внимание на то, как вы создайте новые версии файла журнала с помощью logrotate, если вы создадите новый журнал postgresql с 644 восьмеричными разрешениями, принадлежащими пользователю root, тогда пользователь postgres не сможет записать в новый файл журнала.
Проверьте статус в /var/lib/logrotate/status, если вы видите какие-либо проблемы
Пожалуйста, проверьте разрешения и права собственности на файлы в /etc/logrotate.d корневом владельце и режиме разрешения 644. фрагмент кода для logrotate:
/home/rails/myapp/log/*.log {
rotate 12
daily
missingok
compress
notifempty
create 640 rails rails
delaycompress
missingok
}
проверять вывод logrotate вручную с помощью --verbose Если вам требуется логротация более чем для определенного размера, вы можете поэкспериментировать с параметрами maxsize и size в файле конфигурации logrotate