DIR-320 & RTN-r3297 from USB>r3478>r3539>r3722>r3815>r3877>r4051>r4990>r5163
Короче так... "Настраиваем CRON, который есть в прошивке"
Проверяем наличие crond в прошивке
1.1 Используем встроенный в прошивку crond. Если вы устанавливали crond через ipkg, сделайте ipkg remove cron
1.2 Проверяем, есть ли у нас crond, встроенный в прошивку.
ls /usr/sbin/crond
/usr/sbin/crond Это должно быть. Если нет, то у вас нет встроенного crond
Создаем файлы и папки
2.0 Вступление. Дабы не заниматься фигнёй, мы создаем файл crontab, например, на флешке. Чтобы проще редактировать и т.д. Для этого я использую папку /opt/scripts/crondata в данном примере. В этой папке у меня все что относится к cron'у - crontab и скрипты типа cron.5mins. Сразу оговорюсь, я не использую run-parts, таким образом, у меня crond запускает сам скрипт, а не (как во многих мануалах) "все скрипты из папки cron.5min" .
2.1 Создаем папку crondata
2.1 Создаем файл crontab и сценарииCode:mkdir -p /opt/scripts/crondata
Он у меня называется _crontab. cron работает не непосредственно с ним, так что использован символ "_".
Делаем исполняемые файлы исполняемымиCode:touch /opt/scripts/crondata/_crontab touch /opt/scripts/crondata/cron.5min touch /opt/scripts/crondata/cron.daily touch /opt/scripts/crondata/cron.hourly touch /opt/scripts/crondata/cron.weekly
2.2 Заполняем файл crontab содержимым**:Code:chmod +x /opt/scripts/crondata/cron.*
Правила заполнения можно почитать тут. Я предпочитаю не использовать переменную PATH (в место этого указываю полные пути ко всему).Code:SHELL=/bin/sh #min hr dayOfM month dayOfW command */5 * * * * /opt/scripts/crondata/cron.5min 5 * * * * /opt/scripts/crondata/cron.hourly 10 1 * * * /opt/scripts/crondata/cron.daily 15 1 * * 1 /opt/scripts/crondata/cron.weekly
2.3 Заполняем файлы cron.*
Заполняем содержимым файлы cron.*. Напомню, что певая строка содержит упоминание интерпретатора (/bin/sh в моем случае). Вторая строка запускает программу logger. В данном случае logger должен добавить в системный журнал событие (во столько-то запущен cron-daily)*
Отдельно замечу: файл /opt/scripts/crondata/cron.5min я использую только для проверки работоспособности crond. Так что его содержимое состоит из одного logger-аCode:#!/bin/sh logger [CRON-DAILY] #Меняем на weekly\hourly\5mins=\в зависимости от скрипта #Ваши команды. Указывайте полные пути ко всему!
Code:#!/bin/sh logger [CRON-5MIN]
Добавляем в автозапуск
3.0 Учить, как именно настраивать post-mount не буду - ищите сами.
3.1 Добавляем в post-mount
В комментариях упоминается admin как суперпользователь. У вас он может быть root или еще как нибудь. В общем, скрипт учитывает это, и admin упоминается только в комментариях
Code:#!/bin/sh #Префикс для системного журнала c_prefix=[INIT][CROND] #Где встроенный crond ищет свои конфиги c_main_crontab_dir=/var/spool/cron/crontabs #Где наш crontab c_opt_crontab=/opt/scripts/crondata/_crontab #Определяем имя root-а (по-умолчанию он admin, но вдруг вы поменяли?) c_root_username=` cat /etc/passwd | /bin/grep :0:0: | /usr/bin/awk -F: '{print $1}'` #встроенный cron будучи запущеным от пользователя admin(root\..) будет искать свои данные crontab в файле /var/spool/cron/crontabs/admin c_main_crontab_file=$c_main_crontab_dir/$c_root_username #Логируемся logger $c_prefix Creating crontabs files for "$c_root_username" #Создаем папку /var/spool/cron/crontabs mkdir -p $c_main_crontab_dir #создаем файл /var/spool/cron/crontabs/admin touch $c_main_crontab_file #Логируемся logger $c_prefix Adding $c_opt_crontab to $c_main_crontab_file #Переносим все из файла /opt/scripts/crondata/_crontab в /var/spool/cron/crontabs/admin cat $c_opt_crontab >> $c_main_crontab_file #Логируемся logger $c_prefix Starting crond #Запускаем crond /usr/sbin/crond -b -S -c $c_main_crontab_dir #Логируем "crond script finished" logger $c_prefix crond script finished
Проверяем
Сохраняем flashfs, перезагружаем роутер.
Смотрим логи.
Ищем это
Заходим на роутер, проверяем служебный crontabCode:Apr 16 16:22:34 admin: [INIT][CROND] Creating crontabs files for admin Apr 16 16:22:34 admin: [INIT][CROND] Adding /opt/scripts/crondata/_crontab to /var/spool/cron/crontabs/admin Apr 16 16:22:34 admin: [INIT][CROND] Starting crond Apr 16 16:22:34 crond[433]: crond: crond (busybox 1.18.4) started, log level 8 Apr 16 16:22:35 admin: [INIT][CROND] Script finished
Должно отобразиться то же содержимое что и у /opt/scripts/crondata/_crontab#admin заменить на ваш логин в роутере
cat /var/spool/cron/crontabs/admin
В течении 6 минут должна появиться запись
Появилась - значит работает.Code:Apr 16 19:05:01 crond[433]: crond: USER admin pid 465 cmd /opt/scripts/crondata/cron.5min Apr 16 19:05:01 admin: [CRON-5MIN]
Сноски:
* logger <text> добавляет text в syslog датой выполнения. То есть можно так отслеживать свои сценарии и т.д.
**
В crontab: 0 -воскресение, 1 - понедельник, .... 6 - суббота*/5 * * * * /opt/scripts/crondata/cron.5min ВЫПОЛНЯЕТСЯ каждые 5 минут
5 * * * * /opt/scripts/crondata/cron.hourly ВЫПОЛНЯЕТСЯ каждый час, на пятой минуте часа (в 0:05, 1:05, 2:05,...)
10 1 * * * /opt/scripts/crondata/cron.daily ВЫПОЛНЯЕТСЯ каждый день в 1:10
15 1 * * 1 /opt/scripts/crondata/cron.weekly ВЫПОЛНЯЕТСЯ каждый понедельник 1:15
МОГ ГДЕ_ТО ОШИБИТЬСЯ. С РАДОСТЬЮ ПРИМУ ПОПРАВКИ В ЛИЧКУ
Last edited by Omega; 17-01-2016 at 21:34.
Sorry for my bad English.
Покупайте Отечественных Слонов!!!
logger работает "и так", так что полный путь только пачкает код в этом случае.
Почему?
Зачем?
В свою пользу делаю маленький аргумент -
у меня в post-boot логика такая:
- запуск dropbear
- монтирование флешки
- ожидание окончания монтирования
- вызов скрипта /opt/scripts/opt-init
В данном случае /opt/scripts/opt-init инициализирует комплект "сторонних сервисов". Таким образом, если роутер запущен без флешки, он просто роутер вообще без примочек. Если с флешкой - он запускается как микросервер.
Sorry for my bad English.
Покупайте Отечественных Слонов!!!
без смонтированного /opt скрипты крона работать не будут
а если не будут , то с настроить оптварный крон гораздо проще IMHOЗачем?
p.s.
вариант добавления кронтаба в post-boot :
имя админа берется из nvram и файл заготовки переносится куда надо без лишних манипуляций. Путь к файлу, это куда бы я положил заготовку, flashfs наше все . Если бы понадобились новые задания после монтировании /opt, то достаточно в пост-маунтеCode:crontab -u `nvram get http_username` /tmp/local/root/crontab.txt crondи будут выполняться скрипты из этого файла, crond сам подхватит изменения.Code:crontab -u `nvram get http_username` /opt/etc/crontab.txt
Last edited by A1ex; 21-04-2011 at 12:22.
RT-N16 TomatoRAF
на основе своих рабочих файлов. Устанавливаем crond из прошивки. Предполагается , что не установлен любой крон. Зайти на роутер терминалом и скопипастить:перед flashfs у меня добавляются нужные строчки в нужные скрипты , типаCode:CRONDIR=/tmp/local/etc/crond mkdir -p $CRONDIR echo "#min hour day month dayofweek command #" > $CRONDIR/crontab.txt echo "*/5 * * * * $CRONDIR/cron.5mins.sh" >> $CRONDIR/crontab.txt echo "01 * * * * $CRONDIR/cron.hourly.sh" >> $CRONDIR/crontab.txt echo "02 4 * * * $CRONDIR/cron.daily.sh" >> $CRONDIR/crontab.txt echo "22 4 * * 0 $CRONDIR/cron.weekly.sh" >> $CRONDIR/crontab.txt echo "42 4 1 * * $CRONDIR/cron.monthly.sh" >> $CRONDIR/crontab.txt for i in 5mins hourly daily weekly monthly; do echo "#!/bin/sh" > $CRONDIR/cron.$i.sh echo "logger \" --- $CRONDIR/cron.$i.sh start ---\"" >> $CRONDIR/cron.$i.sh chmod +x $CRONDIR/cron.$i.sh done [ -f /tmp/local/sbin/post-boot ] || { echo "#!/bin/sh" >> /tmp/local/sbin/post-boot; chmod +x /tmp/local/sbin/post-boot; } echo "crontab -u \$(nvram get http_username) $CRONDIR/crontab.txt" >> /tmp/local/sbin/post-boot #echo "crond -l 9" >> /tmp/local/sbin/post-boot echo "PATH=/opt/sbin:/opt/bin:\$PATH crond -l 9" >> /tmp/local/sbin/post-boot flashfs save && flashfs commit && flashfs enable
... либо редактируем скрипты ручками.Code:echo "/tmp/local/sbin/archivelog.sh" >> $CRONDIR/cron.daily.sh
Чтобы лог не забивать пятиминутным кроном, crond запускается с ключем l -9. В скриптах затем оставляем, если этот скрипт надо видеть в логе, или удаляем, если не надо видеть, строку logger ...
Присвоение переменных в кронтабе, как в кроне из оптваре, тут не работает, поэтому нужные пути прописаны перед запуском crond. Вот какие пути получились в результате
Или в более удобоваримом варианте , если установлен ps из оптваре, окружение процесса можно посмотретьCode:cat /proc/`pidof crond`/environ OLDPWD=/HOME=/TERM=linuxPATH=/opt/sbin:/opt/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbinPWD=/tmpTZ=MSK-3MSDCode:ps ex|grep -m 1 crond
Last edited by A1ex; 22-04-2011 at 13:18.
RT-N16 TomatoRAF
ASUS N16. есть одна хотелка, которую без знаний линуха не осилю.
хочется, чтобы писался лог, пригодный для дальнейшей обработки примерно по следующим правилам:
раз в минуту пингуется яндыкс, если пинг не прошел, то пинговать раз 2-3 секунды до тех пор, пока не появится коннект.
чтобы в лог писалось примерно следующее.
24.07.2011 17:31 - нет коннекта
24.07.2011 18:00 - есть коннект
лог хотелось бы получать регулярно на мыло и по запросу через веб-морду.
как можно такое или похожее организовать на сабжевом роутере?
может есть какая-нить тулза с веб-мордой, которая даст такой функционал? или может в какой-либо сборке альтернативной прошивки есть такая фича?
в идеале хотелось бы обойтись без подключения внешнего носителя.
Asus RT-AC66U, Xerox Phaser 3160B, on the shelf RT-N16 (Killed by lightning)
WL-500gPv1 128MB, WL-500W 300MHz/128M, LCD 40x4, DIR-320 8Mb/64MB
WL-700g 128MB, MNV25E2+ and more and more devices. provod.beeline.ru
-------------------------------------------
Computers. Since 1984. First one - "МИР-1"
Никому не нужен )
Пингует t_host=www.ya.ru и пишет Mon Jul 25 06:10:00 UTC 2011 -- #КодОшибки в t_logfile=/tmp/log.ping когда он не ноль(то есть без ошибки). Суйте в CRON#!/bin/sh
t_logfile=/tmp/log.ping
t_host=www.ya.ru
ping -c 1 $t_host
t_result=$?
if [ "$t_result" -ne "0" ]
then
echo `date` -- $t_result >> $t_logfile
fi
Sorry for my bad English.
Покупайте Отечественных Слонов!!!
Уважаемые, гуру!
скриптом (для чайников) производиться установка cron
но cron к сожалению не запускается! Все файлы что необходимы в системе присутствует но он так и не работает.Code:ipkg install cron
Удаляю и снова устанавливаю cron
и только после этого все начинает работать.Code:ipkg remove cron ipkg install cron
Подскажите, пожалуйста, как правильно необходимо ставить cron, дабы потом не приходилось повторять действия удаления и повторной установки.
Сам с этим столкнулся , но как оказалось не всё так страшно ,просто при установке програм скриптом для чайников файл кронтаб пустой , из-за этого крон и не работает , просто заполняете этот файл нужным содержимым и крон начинает работать. Кстати бывают случаи когда ставится всё нормально , но в большенстве случаев крон не работает , закономерности в этом не нашёл
Asus RT-N16 FW:1.9.2.7-rtn-r2944 + HDD 1 TB WD WD10EARS + Mobile Rack AgeStar SUB3AHT
USB Flash 2 Gb Программы для чайника + nShaper + Poptop + Онлайн радио + Egreat EG-R1