Планировщик заданий cron в Entware

Используем пакеты, расширяющие возможности оборудования
Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 08 дек 2015, 12:34

Это тема посвящена планировщику заданий cron в Entware.

На самом деле в Entware два варианта планировщика cron - в виде апплета busybox и в виде отдельного пакета. Этот пост посвящен апплету busybox.

Для того, чтобы использовать этот вариант cron следует установить busybox (если это не сделано раньше)

Код: Выделить всё

opkg install busybox

Попробуем создать задание с помощью утилиты crontab

Код: Выделить всё

crontab -e

Получим "ругательное сообщение" что нет нужной папки

Код: Выделить всё

crontab: can't change directory to '/opt/var/spool/cron/crontabs': No such file or directory

Создадим эту папку:

Код: Выделить всё

mkdir -p /opt/var/spool/cron/crontabs

По умолчанию crontab использует очень удобный редактор vi. Но этот редактор непривычен новичкам. Новечкам рекомендую поставить nano `opkg install nano` или другой привычный редактор и вызывать crontab так

Код: Выделить всё

EDITOR='/opt/bin/nano' crontab -e

В результате будет вызван редактор nano с пустым заданием cron. Наберем в нем следующее тестовое задание

Код: Выделить всё

PATH=/opt/bin:/opt/sbin:/sbin:/usr/sbin:/bin:/usr/bin
*/1 * * * * /opt/bin/logger "Test of cron every minute"

Это задание пишет в лог (журнал) роутера каждую минуту сообщение о срабатывании cron. Сам файл с заданием появится под именем root или admin (в зависимости от имени суперпользователя) в созданной ранее папке.
Запустим cron

В логе должны появится строки подобные этим

Код: Выделить всё

Dec  8 11:10:08 crond[4909]: crond (busybox 1.24.1) started, log level 8
Dec  8 11:11:00 crond[4909]: USER admin pid 4914 cmd /opt/bin/logger "Test of cron every minute"
Dec  8 11:11:00 admin: Test of cron every minute
Dec  8 11:12:00 crond[4909]: USER admin pid 4916 cmd /opt/bin/logger "Test of cron every minute"
Dec  8 11:12:00 admin: Test of cron every minute

Если у Вас cron заработал, остановим его

Код: Выделить всё

killall crond

Для автозапуска создадим файл S05crond в папке /opt/etc/init.d следующего содержания

Код: Выделить всё

#!/bin/sh
 

CRON="/opt/sbin/crond"

export PATH=/opt/bin:/opt/sbin:/sbin:/usr/sbin:/bin:/usr/bin

start() {
	$CRON -L /dev/null
}

 stop() {
	killall crond
}

 case "$1" in
	start)
	    start
	    ;;
	stop)
	    stop
	    ;;
	restart)
	    stop
	    start
	    ;;
	*)
	    echo "Usage: $0 {start|stop}"
	    ;;
esac 

Запустим этот скрипт с параметром start или перезагрузим роутер.
Для создания своих заданий Вам потребуется документация по формату crontab. Ее в интернете вагон и маленькая тележка. Например
http://www.nncron.ru/nncronlt/help/RU/w ... format.htm
http://www.k-max.name/linux/planirovshh ... b-anacron/

Счастливого планирования заданий

Аватара пользователя
Александр Рыжов
Сообщения: 445
Зарегистрирован: 12 авг 2015, 14:14
Откуда: Смоленск

Сообщение Александр Рыжов » 08 дек 2015, 12:59

Второй вариант — использование привычного в полноценных linux-средах Vixie's cron:

Код: Выделить всё

opkg install cron

Вместе с пакетом устанавливается стартовый скрипт, запускающий cron после загрузки устройства и ряд папок для облегчения исполнения заданий:

Код: Выделить всё

/opt/etc/cron.1min
/opt/etc/cron.5mins
/opt/etc/cron.hourly
/opt/etc/cron.daily
/opt/etc/cron.weekly
/opt/etc/cron.monthly

Достаточно положить в соответствующую папку исполняемый файл (или симлинк) он будет выполняться раз в минуту/раз в пять минут и т.п.
Заданиями рулит файл /opt/etc/crontab. После установки пакета как минимум надо уточнить имя суперпользователя в вашей системе. Отнюдь не во всех прошивках его зовут root, на asuswrt-merlin, к примеру, это admin. В последнем случае придётся отредактировать/opt/etc/crontab, заменив root на admin

Код: Выделить всё

sed -i 's/root/admin/g' /opt/etc/crontab

Пожалуйста учтите, что формат crontab'а отличается от варианта busybox из предыдущего поста, в нём есть поле для имени пользователя:

Изображение

После редактирования заданий cron можно запустить, выполнив:

Код: Выделить всё

/opt/etc/init.d/S10cron start

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 08 дек 2015, 13:16

Обращаю внимание, что бинарник в пакете /opt/sbin/cron, а апплет /opt/bin/crond (разница в одну букву)
При установке пакета cron симлинк /opt/bin/crontab от busybox будет переписан бинарником из пакета.

felcons
Сообщения: 28
Зарегистрирован: 29 дек 2015, 13:42

Сообщение felcons » 03 янв 2016, 03:20

поставил крон через такую команду

Код: Выделить всё

opkg install cron

после его запуска в лог пишется так:

Код: Выделить всё

Jan  3 01:15:18 cron[1628]: (CRON) STARTUP (V5.0)
Jan  3 01:15:18 cron[1628]: (*system*) BAD FILE MODE (/opt/etc/crontab)



как вычислить что ему в кронтабе ненравится?
он у меня сразу после установки, родной и я ничего не правил.
имя пользователя root существует, и тоже проблем нету.

Код: Выделить всё

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin:/opt/sbin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
*/1 * * * * root /opt/bin/run-parts /opt/etc/cron.1min	
*/5 * * * * root /opt/bin/run-parts /opt/etc/cron.5mins	
01 * * * * root /opt/bin/run-parts /opt/etc/cron.hourly	
02 4 * * * root /opt/bin/run-parts /opt/etc/cron.daily	
22 4 * * 0 root /opt/bin/run-parts /opt/etc/cron.weekly	
42 4 1 * * root /opt/bin/run-parts /opt/etc/cron.monthly	



Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 03 янв 2016, 10:11

felcons писал(а):Источник цитаты Jan 3 01:15:18 cron[1628]: (*system*) BAD FILE MODE (/opt/etc/crontab)

Решение дает Google в первой же ссылке - не стыдитесь. Entware - система для тех, кто умеет использовать поиск!

felcons
Сообщения: 28
Зарегистрирован: 29 дек 2015, 13:42

Сообщение felcons » 03 янв 2016, 15:15

Читал ещё что может быть проблема в атрибуте, и надо ставить атрибут 644 на /opt/etc/crontab но и атрибут не выставляется и крон даже останавливаю и ничего оно не даёт. Атрибут на выполнение стоит. Пока крон так и не запустил.
Но с другой стороны по логике вещей сам пакет крон поставляется сразу с нерабочим кронтабом. Как так может быть?

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 03 янв 2016, 15:24

felcons писал(а):Источник цитаты Читал ещё что может быть проблема в атрибуте, и надо ставить атрибут 644


Так сразу же об этом нужно написать. Правила общения на техническом форуме давно известны - http://maddog.sitengine.ru/smart-question-ru.html
Нужно подробно написать, что делали, как пытались решить проблему, что не вышло. В противном случае Вас посчитают лентяем и отвечать не будут.
felcons писал(а):Источник цитаты но и атрибут не выставляется и крон даже останавливаю и ничего оно не даёт. ... Как так может быть?

Возможно неправильно выставляете. Рискну еще предположить, что используется файловая система NTFS у которой проблема с поддержкой атрибутов. Скорее всего апплету busybox не нужны такие жесткие условия на атрибуты. Если у Вас NTFS - попробуйте этот вариант cron. Все решения в этом топике - рабочие при использовании нормальных файловых систем - ext2/3. Если у Вас нечто не работает - ищите причину и предлагайте решение, а не плачьте!

felcons
Сообщения: 28
Зарегистрирован: 29 дек 2015, 13:42

Сообщение felcons » 03 янв 2016, 15:44

У меня ntfs, и в ней атрибуты не выставляются. Чесно говоря, не понял, какой вариант крон поставить? Как его ставить, с пакета, или откуда взять? Просто с под виндовса у меня нет чем переформатировать флешку в формат ext2. А в нтфс атрибут не ставится, вот и замкнутый круг.

Аватара пользователя
Александр Рыжов
Сообщения: 445
Зарегистрирован: 12 авг 2015, 14:14
Откуда: Смоленск

Сообщение Александр Рыжов » 03 янв 2016, 16:37

felcons писал(а):Просто с под виндовса у меня нет чем переформатировать флешку в формат ext2.
Есть чем, вариантов куда больше одного.

http://www.partition-tool.com/

felcons
Сообщения: 28
Зарегистрирован: 29 дек 2015, 13:42

Сообщение felcons » 03 янв 2016, 16:56

проблема отпала. поставил из первого варианта в этом топике и всё стало ок.
Всем спасибо.


Вернуться в «Entware/Qnapware/Optware/Zyxware - обсуждаем репозитории пакетов»

Кто сейчас на конференции

Всего 7 посетителей :: 3 зарегистрированных, 0 скрытых и 4 гостя (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33

Сейчас этот форум просматривают: Bing [Bot], CommonCrawl [Bot], Google [Bot] и 4 гостя