Results 1 to 15 of 339

Thread: Настройка CRON на роутере

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Quote Originally Posted by FilimoniC View Post
    Я к тому что скорее всего он у вас уже запущен :-)
    не понял... что мне тогда сделать?

    Quote Originally Posted by FilimoniC View Post
    $ ps -ax | grep cron до запуска крона сделайте
    после запуска выводится

    [partner@Gateway root]$ ps ax | grep cron
    ps: invalid option -- a
    BusyBox v1.18.4 (2011-04-05 04:42:31 MSD) multi-call binary.

    Usage: ps

    Show list of processes

    Options:
    w Wide output


    Набрал просто ps, в списке активных процессов нету, по системному логу вижу что 5-ти минутные скрипты не отрабатывают.

    /opt/var/run/cron.pid - а вообще что за файл, для чего он нужен? у меня его вообще нету, как его создать?
    Last edited by Omega; 20-04-2011 at 19:26. Reason: 2 post merged

  2. #2
    Join Date
    Jan 2011
    Location
    Нижний Новгород
    Posts
    543
    Quote Originally Posted by partner View Post
    не понял... что мне тогда сделать?
    содержимое /opt/etc/cron.5mins и /opt/etc/cron.hourly одним архивом сюда
    DIR-320 & RTN-r3297 from USB>r3478>r3539>r3722>r3815>r3877>r4051>r4990>r5163

  3. #3
    Короче так... "Настраиваем 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
    Code:
    mkdir -p /opt/scripts/crondata
    2.1 Создаем файл crontab и сценарии
    Он у меня называется _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
    Делаем исполняемые файлы исполняемыми
    Code:
    chmod +x /opt/scripts/crondata/cron.*
    2.2 Заполняем файл crontab содержимым**:
    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
    Правила заполнения можно почитать тут. Я предпочитаю не использовать переменную PATH (в место этого указываю полные пути ко всему).

    2.3 Заполняем файлы cron.*
    Заполняем содержимым файлы cron.*. Напомню, что певая строка содержит упоминание интерпретатора (/bin/sh в моем случае). Вторая строка запускает программу logger. В данном случае logger должен добавить в системный журнал событие (во столько-то запущен cron-daily)*
    Code:
    #!/bin/sh
    logger [CRON-DAILY] #Меняем на weekly\hourly\5mins=\в зависимости от скрипта 
    #Ваши команды. Указывайте полные пути ко всему!
    Отдельно замечу: файл /opt/scripts/crondata/cron.5min я использую только для проверки работоспособности crond. Так что его содержимое состоит из одного logger-а
    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, перезагружаем роутер.
    Смотрим логи.
    Ищем это
    Code:
    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
    Заходим на роутер, проверяем служебный crontab
    #admin заменить на ваш логин в роутере
    cat /var/spool/cron/crontabs/admin
    Должно отобразиться то же содержимое что и у /opt/scripts/crondata/_crontab

    В течении 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 датой выполнения. То есть можно так отслеживать свои сценарии и т.д.
    **
    */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
    В crontab: 0 -воскресение, 1 - понедельник, .... 6 - суббота

    МОГ ГДЕ_ТО ОШИБИТЬСЯ. С РАДОСТЬЮ ПРИМУ ПОПРАВКИ В ЛИЧКУ
    Last edited by Omega; 17-01-2016 at 21:34.
    Sorry for my bad English.
    Покупайте Отечественных Слонов!!!

  4. #4
    Quote Originally Posted by FilimoniC View Post
    Code:
    #!/bin/sh
    logger [CRON-DAILY] #Меняем на weekly\hourly\5mins=\в зависимости от скрипта 
    #Ваши команды. Указывайте полные пути ко всему!
    ну если полные пути , то logger это команда и должно быть /usr/bin/logger

    з.ы. IMHO размешать скрипты на /opt не очень хорошая идея. Тогда уж проще крон с оптваре поставить
    Last edited by A1ex; 21-04-2011 at 06:28.
    RT-N16 TomatoRAF

  5. #5
    Quote Originally Posted by A1ex View Post
    ну если полные пути , то logger это команда и должно быть /usr/bin/logger
    logger работает "и так", так что полный путь только пачкает код в этом случае.
    Quote Originally Posted by A1ex View Post
    з.ы. IMHO размешать скрипты на /opt не очень хорошая идея.
    Почему?
    Quote Originally Posted by A1ex View Post
    Тогда уж проще крон с оптваре поставить
    Зачем?

    В свою пользу делаю маленький аргумент -
    у меня в post-boot логика такая:
    - запуск dropbear
    - монтирование флешки
    - ожидание окончания монтирования
    - вызов скрипта /opt/scripts/opt-init

    В данном случае /opt/scripts/opt-init инициализирует комплект "сторонних сервисов". Таким образом, если роутер запущен без флешки, он просто роутер вообще без примочек. Если с флешкой - он запускается как микросервер.
    Sorry for my bad English.
    Покупайте Отечественных Слонов!!!

  6. #6
    Quote Originally Posted by FilimoniC View Post
    Почему?
    без смонтированного /opt скрипты крона работать не будут
    Зачем?
    а если не будут , то с настроить оптварный крон гораздо проще IMHO

    p.s.
    вариант добавления кронтаба в post-boot :
    Code:
    crontab -u `nvram get http_username`  /tmp/local/root/crontab.txt
    crond
    имя админа берется из nvram и файл заготовки переносится куда надо без лишних манипуляций. Путь к файлу, это куда бы я положил заготовку, flashfs наше все . Если бы понадобились новые задания после монтировании /opt, то достаточно в пост-маунте
    Code:
    crontab -u `nvram get http_username`  /opt/etc/crontab.txt
    и будут выполняться скрипты из этого файла, crond сам подхватит изменения.
    Last edited by A1ex; 21-04-2011 at 12:22.
    RT-N16 TomatoRAF

  7. #7

    запуск crond из прошивки

    на основе своих рабочих файлов. Устанавливаем crond из прошивки. Предполагается , что не установлен любой крон. Зайти на роутер терминалом и скопипастить:
    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
    перед flashfs у меня добавляются нужные строчки в нужные скрипты , типа
    Code:
    echo "/tmp/local/sbin/archivelog.sh" >> $CRONDIR/cron.daily.sh
    ... либо редактируем скрипты ручками.
    Чтобы лог не забивать пятиминутным кроном, crond запускается с ключем l -9. В скриптах затем оставляем, если этот скрипт надо видеть в логе, или удаляем, если не надо видеть, строку logger ...

    Присвоение переменных в кронтабе, как в кроне из оптваре, тут не работает, поэтому нужные пути прописаны перед запуском crond. Вот какие пути получились в результате
    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-3MSD
    Или в более удобоваримом варианте , если установлен ps из оптваре, окружение процесса можно посмотреть
    Code:
    ps ex|grep -m 1 crond
    Last edited by A1ex; 22-04-2011 at 13:18.
    RT-N16 TomatoRAF

  8. #8
    Quote Originally Posted by FilimoniC View Post
    Короче так... "Настраиваем CRON, который есть в прошивке".
    Добавляем в автозапуск
    ....
    3.1 Добавляем в post-mount
    ...
    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
    Cкрипт можно упростить. Незачем определять имя текущего пользователя, незачем создавать отсутствующие директории и переносить в них файлы. Для всех этих манипуляций предназначен /usr/bin/crontab из состава прошивки:
    Code:
    #!/bin/sh
    #Где наш crontab?
    c_opt_crontab=/opt/scripts/crondata/_crontab
    
    #Переносим все из файла /opt/scripts/crondata/_crontab в /var/spool/cron/crontabs/<username>
    /usr/bin/crontab $c_opt_crontab
    
    #Логируемся
    logger Starting crond
    
    #Запускаем crond
    /usr/sbin/crond -b -S -c /var/spool/cron/crontabs
    
    #Логируем "crond script finished"
    logger crond script finished
    Last edited by Omega; 17-01-2016 at 21:31.

Similar Threads

  1. Установка и настройка Quagga на роутере
    By mymp in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 149
    Last Post: 02-09-2016, 15:21
  2. [HOW-TO] Установка и настройка ownCloud на роутере
    By ryzhov_al in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 6
    Last Post: 11-08-2013, 19:53
  3. Настройка VPN подключения на роутере
    By Tonusichka in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 215
    Last Post: 07-08-2012, 10:19
  4. Настройка mpcs на роутере
    By poptab in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 1059
    Last Post: 17-07-2012, 06:22
  5. Установка и настройка ipkg на роутере
    By FilimoniC in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 250
    Last Post: 06-12-2008, 07:37

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •