
gvan
Участники форума-
Постов
211 -
Зарегистрирован
-
Победитель дней
2
Тип контента
Профили
Форумы
Галерея
Загрузки
Блоги
События
Весь контент gvan
-
Если вы задались задачей собирать логи (журналы работы) системы в отдельный файл, который не стирается после перезагрузки роутера, то, скорее всего, через некоторое время столкнетесь с проблемой, когда размер лога станет занимать значительный объем диска. Задача по включении системного логирования во внешний лог описывается в соответствующей теме "Запись syslog на внешний USB-диск с помощю Syslog-ng", (автор Roman_Petrov). Здесь рассмотрим непосредственно механизм ротации логов. 1. Необходимо установить через opkg пакеты logrotate и cron. Cron нужен для периодического запуска logrotate. А logrotate в свою очередь требуется для проверки необходимости ротации логов и непосредственно их ротации в соответствии с заданными условиями (например, интервал времени и объем). С cron могут возникнуть проблемы, если файловая система диска fat или ntfs, т.к. на конфигурационных файлах будут неправильные (с точки зрения linux/cron) атрибуты файлов. И задачи просто не будут запускаться. Решение имеется, но нужно ставить crontab из busybox (п.2). Второй и третий вариант решения проблемы с cron и ntfs/fat - это изменить файловую систему подключенного диска на ext2 или ext3, либо поставить поддержку opkg на отдельную флэшку (раздел) с ext2/ext3 (если, не хочется возиться с преобразованием основного диска). Для себя я выбрал третий вариант (хотя и на диске с файлами у меня ext3). Но т.к. основной диск у меня используется редко, и я хочу, чтобы он "засыпал" и отключал питание, то все логи пишу на отдельную флэшку (достаточно будет размером 1 Гб). 2. Настраиваем ротацию логов. Основной конф /opt/etc/logrotate.conf не трогаем и делаем отдельную конфигурацию для ротации файла /opt/var/log/messages (таким же образом можно будет настроить ротирование и других логов, если они у вас имеются - например, от прокси). Для этого в подключаемом по-умолчанию каталоге /opt/etc/logrotate.d (указано в основной конфигурации /opt/etc/logrotate.conf) создаем конф-файл messages и добавляем в него следующие строки: Здесь ротация производится по достижению размера лога 1Мб, хранится всего три последних файла. После ротации лога перезапускается сервис syslog-ng (нужно для правильного продолжения записи в новый лог). С учетом основной конфигурации (см. файл /opt/etc/logrotate.conf, опция weekly) ротация лога будет производиться каждую неделю или же при достижении объема 1Мб. Можно почитать в инете мануал для более тщательной настройки logrotate. Например, чтобы делать ротацию не только по размеру, но и по времени. Можно также сжимать архивные файлы логов. Перевод документации по logrotate можно посмотреть на сайте OpenNET. 3. Далее настраиваем cron в основном файле /opt/etc/crontab. Т.к. по-умолчанию задач, выполняемых ежедневно, еженедельно и т.п., у меня нет, то он выглядит так: Раскоментарена только строка для выполнения ежедневных задач. По-умолчанию после установки cron запускаются все задачи (все строки раскоментарены). Т.е. можно данный файл и не изменять, но при этом в /opt/var/log/messages при выполнении этих задач-заглушек (с частотой, как минимум 1 минута) будет появляться соответствующая запись о выполнении данной задачи. Поэтому решать вам. Нужно также перезапустить службу cron. Для этого необходимо выполнить команду с консоли: /opt/etc/init.d/S10cron restart 4. Добавляем в cron задачу, которая будет выполняться один раз в сутки. Для этого в каталоге /opt/etc/cron.daily размещаем исполняемый файл. Я его назвал /opt/etc/cron.daily/logrotate . В нем размещены следующие команды: Исполняемым файл можно сделать через пакет mc (файловый менджер - must have) или с командной строки: chmod 755 /opt/etc/cron.daily/logrotate Можно проверять необходимость ротации логов чаще, а не только раз в сутки. Для этого нужно раскоментировать соответствующие записи /opt/etc/crontab и поместить задачу logrotate в соответствующий каталог. Но, как правило, в нашем случае логи быстро не увеличивают размер и в этом необходимости нет. Обращаю внимание, что linux очень часто плохо относится к тому, если в текстовых конф-файлах и т.п. последняя строка не заканчивается символом возврата каретки. Поэтому необходимо после последней строки в файле нажимать Enter для перевода курсора на новую пустую строку. В приведенных мной примерах эта пустая строка имеется. Всё. Если хочется сразу проверить ротацию лога вручную (и его размер в соответствии с конфом уже больше 1Мб), то команду ротации можно принудительно выполнить с консоли (или просто запустить исполняемый файл-задачу): /opt/sbin/logrotate /opt/etc/logrotate.conf или (т.к. файл у нас уже исполняемый) запустить задачу /opt/etc/cron.daily/logrotate
-
Пожалуйста. Т.е. в итоге заработало? Еще нужно не забывать в конце конф-файлов и текстовых скриптов добавлять пустую строку (иногда это может быть критично для нормального выполнения задач).
-
Я тоже об этом подумал. Есть желание это оформить в отдельную тему. Да и так правильней будет: сбор логов это одно дело, а управление их ротацией - другое. Могут быть и другие службы запущены, которые пишут свои логи в отдельные файлы (у меня это, например, прокси). Просто кроме меня пока это понадобилось только одному пользователю, поэтому пока руки не доходили
-
Хорошо. Покажите содержимое файлов /opt/etc/crontab и вывод команды: ls -l /opt/etc/crontab ls -l /opt/etc/cron.5mins/test.sh ps | grep cron Также в test.sh лучше написать date >> /opt/tmp/crontest.txt Также, с учетом того, что cron работает "поверх" основной системы, то свои логи в веб-интерфейсе роутера он не показывает. Желательно включить логирование через ng-syslog, тогда свои сообщения (в т.ч. и об ошибках cron будет бросать в /opt/var/log/messages).
-
Уже ответил в теме Просмотр информации SMART (здоровья) подключенного жёсткого диска по возможным проблемам с cron.
-
Если установлен обычный cron через opkg install cron, и файловая система на диске с поддержкой opkg ntfs или fat, то работать задачи из cron не будут. Нужно поменять файловую систему на ext2/ext3 или установить crontab из busybox (п.2)
-
Да, это нужно обязательно сделать. В логе будет проще что-то найти. Да и хранить древние, никому ненужные объемы данных никакого смысла нет. Свое предыдущее сообщение немного дополнил, конфигурацию для ротации /opt/var/log/messages вынес в отдельный файл (чтобы не изменять основной конф-файл logrotate). Пробуйте. Возможно, что-то не учел или где-то ошибся. Если не получится или что-то не заработает, как нужно, сообщайте. Будем разбираться.
-
Все можно сделать. И по объему и по времени. Это же linux. Ставьте logrotate (возможно, он по дефолту уже стоит - я не помню) и настраивайте /opt/etc/logrotate.conf. Только еще нужно в /opt/etc/cron.daily засунуть задачу, чтобы он запускал ротацию каждые сутки. И, конечно, предварительно поставить cron. Сейчас спешу. Если не разберетесь и требуется дополнительная помощь, то могу выложить пример своей конфигурации для logrotate и cron.
-
А точно на кинетике у вас 192.168.6.1 адрес, а не 192.168.1.1? Если syslog не запущен, то что выдает ручная команда его запуска с ключом -e (вывод ошибок на консоль) "syslog-ng -e"?
-
Хорошо. Останавливайте службу и попробуйте запустить ее вручную. Я в конф-файле изменил адрес syslog своего сервера source src { udp(ip(192.168.1.111) port(514)); internal(); unix-stream("/dev/log"); }; На самом деле на кинетике у меня адрес 192.168.1.1. Проверку на синтаксис проходит, но запускаться отказывается, т.к. syslog пытается забиндиться на указанный адрес, но естественно не может. /opt/etc/init.d$ syslog-ng -e Error binding socket; addr='AF_INET(192.168.1.111:514)', error='Cannot assign requested address (126)' Error initializing source driver; source='src' У вас адрес 192.168.6.111 - это адрес, с которого вы хотите принимать лог? А адрес кинетика какой?
-
Я склоняюсь все-таки к тому, что у вас какая-то синтаксическая ошибка в конф-файле. Завершите процесс syslog и запустите вручную проверку конфигурации на синтаксис. /opt/etc$ /opt/etc/init.d/S01syslog-ng stop Checking syslog-ng... alive. Shutting down syslog-ng... done. /opt/etc$ syslog-ng -s syntax error in /opt/etc/syslog-ng.conf at line 14. Я намеренно внес ошибку в конф-файл, и проверка на синтаксис ее показала в той строке, в которой она находится. Если ошибок в конфигурации нет, то команда проверки завершится без каких-либо сообщений.
-
Только тогда пропадут сообщения от системы и служб, поднятых через opkg (например, от cron). У меня после установки ng-syslog было так: source src { unix-stream("/dev/log"); internal(); }; Объединил предложенную запись с системным логгерами: source src { udp(ip(192.168.1.1) port(514)); internal(); unix-stream("/dev/log"); };
-
Если известны команды, которые необходимо выполнить при старте роутера, то, как и отмечено выше, скрипт с ними необходимо разместить в /opt/etc/init.d, название файла должно начинаться на S (например, SxxMount_cifs, xx указано для сортировки скриптов, соответственно, скрипт будет выполняться в самом конце).Пример скрипта, выполняющегося при старте системы (не имеет отношения к монтированию), есть здесь.
-
Если кто-то еще не планирует переходить на прошивку 2.06 в виду ее активного тестирования и наличия возможных багов и как я использует 2.05, то прилагаю скрипт, который при старте роутера выставляет соответствующие флаги в файлах allow_restart. Скрипт необходимо разместить в /opt/etc/init.d. Назвал его для примера - SxxUSBAllowReset: #!/opt/bin/sh /opt/bin/find /sys/class/scsi_disk -name allow_restart -exec /opt/bin/sh -c "/opt/bin/echo 1 > {}" \; Поначалу я в данном скрипте тупо выставлял в /sys/class/scsi_disk/0:0:0:0/allow_restart и /sys/class/scsi_disk/1:0:0:0/allow_restart единицу, но в прошивке v2.05(AAFS.6)C4 номера устройств поменялись на 2:0:0:0 и 3:0:0:0, поэтому при очередном рестарте роутера скрипт не отработал и у меня опять посыпались ошибки после остановки винта. Соответственно выше представлена команда, которая сама ищет имена устройств вне зависимости от их ID и взводит allow_restart в 1.
-
Ну я тоже так думал. Забыл добавить информацию еще по своим экспериментам. Дополняю. Читал информацию по SMART через smartctl - хорошая: [more]SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000b 100 100 050 Pre-fail Always - 0 2 Throughput_Performance 0x0005 100 100 050 Pre-fail Offline - 0 3 Spin_Up_Time 0x0027 100 100 001 Pre-fail Always - 3766 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 16616 5 Reallocated_Sector_Ct 0x0033 100 100 050 Pre-fail Always - 0 7 Seek_Error_Rate 0x000b 100 100 050 Pre-fail Always - 0 8 Seek_Time_Performance 0x0005 100 100 050 Pre-fail Offline - 0 9 Power_On_Hours 0x0032 041 041 000 Old_age Always - 23795 10 Spin_Retry_Count 0x0033 253 100 030 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 2737 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 137 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 184 193 Load_Cycle_Count 0x0032 092 092 000 Old_age Always - 89817 194 Temperature_Celsius 0x0022 100 100 000 Old_age Always - 32 (Min/Max 19/55) 196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 220 Disk_Shift 0x0002 100 100 000 Old_age Always - 83 222 Loaded_Hours 0x0032 098 098 000 Old_age Always - 1021 223 Load_Retry_Count 0x0032 100 100 000 Old_age Always - 0 224 Load_Friction 0x0022 100 100 000 Old_age Always - 0 226 Load-in_Time 0x0026 100 100 000 Old_age Always - 347 240 Head_Flying_Hours 0x0001 100 100 001 Pre-fail Offline - 0 SMART Error Log Version: 1 No Errors Logged[/more] Подключил винт к ноутбуку, загрузил линукс, проверил диск на bad block. Никаких проблем не обнаружено. Как и писал выше, если диску (но, скорее всего речь идет о прослойке USB-SATA) не давать спать, то никаких проблем не возникает. Как решил проблему через установку /sys/block/sda/device/scsi_disk*/allow_restart в 1 уже написал. Два дня тестирую, пока проблема не проявилась. А раньше достаточно было выждать 10 минут (подождать отключения диска) и обратиться к нему вновь. Т.е. баг у меня воспроизводится с 100% вероятностью. Теперь же диск спит, сколько хочет и с радостью просыпается без всяких ошибок. И судя по всему, проблема для linux не нова. Вот еще в тему http://www.yqcomputer.com/1116_5473_1.htm
-
sd 0:0:0:0: [sda] Device not ready: <6>: Sense Key : 0x2 [current]
gvan опубликовал вопрос в Обмен опытом
Keenetic Giga 2, черный, v2.05(AAFS.4)C4 (но проблема началась на последней официальной прошивке или, возможно на бете с opkg). На самом деле было изменено несколько обстоятельств. Кроме установки прошивки с поддержкой opkg, на USB диске ADATA CH94 1ТБ (внутри TOSHIBA MK1059GSM) поменял еще и файловую систему с NTFS на EXT2. После засыпания HHD и последующем обращении к нему стали сыпаться ошибки (копировал с другого форума и сообщения, где тип ФС NTFS, поскольку проблему удалось решить и сейчас таких ошибок у меня нет): Jan 21 02:39:18ndmkernel: sd 0:0:0:0: [sda] Device not ready: <6>: Sense Key : 0x2 [current] Jan 21 02:39:18ndmkernel: : ASC=0x4 ASCQ=0x2 Jan 21 02:39:18ndmkernel: end_request: I/O error, dev sda, sector 1183 Jan 21 02:39:18ndmkernel: tntfs error (device sda1, pid 3): ntfs_end_buffer_async_read(): Buffer I/O error, logical block 0x230 (сектора любые). Jan 21 02:39:18ndmkernel: tntfs error (device sda1, pid 3): ntfs_end_buffer_async_read(): Buffer I/O error, logical block 0x231. После нескольких таки сообщений ФС автоматом перемонтировалась в ридонли. Соответственно, такая ситуация совсем не устраивала. Вот еще пример подобной ошибки у другого пользователя http://forum.zyxmon.org/topic581-giga-ii-usb-hdd-ukhodit-v-read-only.html Что делал, чтобы решить проблему: 0. Искал решения в Сети. 1. Обновился на тестовую 2.06. Не помогло (-) 2. Подключил внешнее питание к диску через Y-USB кабель. (-) 3. Заменил коробку (интерфейс USB-SATA). (-) 4.1 Пробовал через hdparm отключить засыпание винта. (-) 4.2 (бубен) Заменил Ext2 на Ext3. (-) 5. В соответствии с п. 0 в cron добавил задачу, которая каждые 5 минут пишет в файл на диск текущее время. Помогло (+). Т.к. роутер с винтом стоит в кладовке, то круглосуточная работа диска не напрягала. Но с учетом того, что винт требуется редко, то хотелось решить вопрос правильным способом: чтобы винт все-таки отключался по таймауту, когда не требуется, и проспался без ошибок при обращении к нему (т.к. хоть и немного, но питание двигатель потребляет, плюс износ самого двигателя). Дополнительный поиск вывел на следующую страницу http://www.nslu2-linux.org/wiki/FAQ/DealWithAutoSpinDownOnSeagateFreeAgent Установка параметра echo 1 > /sys/block/sda/device/scsi_disk*/allow_restart решила мою проблему. Винт засыпает и при просыпании не возникает ошибок. Сделал скрипт, который запускается при старте роутера и выполняет установку allow_restart в 1. Соответственно, вопрос. Что-то поменялось в прошивке, если ранее у меня таких проблем не возникало? И возможно ли сделать в следующих прошивках, чтобы данный параметр выставлялся автоматом? Или же проблема настолько специфичная и узко зависит от прослойки USB-SATA, что проявляется очень редко.