Каталог товаров

Выполнение команд по расписанию

Omega имеет мощную встроенную функцию, которая называется cron, которая позволяет планировать команды для запуска через определенные промежутки времени. Из этой статьи вы узнаете, как использовать cron для автоматизации команд и действий на Omega.

Эта функция может быть особенно полезной для автоматизации проектов. Например, вы можете создать устройство мониторинга погоды, которое отображает информацию на OLED Expansion, и обновлять его каждый час с помощью нескольких простых шагов.

Что такое cron?

В вычислительных терминах служебный процесс - это программа, которая работает в фоновом режиме и отвечает на запросы сервисов. В Omega cron работает как служебный процесс и контролирует crontab - файл, в котором перечислены команды, которые должны выполняться с заданными интервалами. Этими командами могут быть программы, сценарии и все, что вы можете ввести в командной строке.

Использование cron

Чтобы узнать, как использовать cron, мы напишем скрипт, который будем использовать для выполнения по расписанию. Если у вас уже есть команда, которую вы хотите выполнить, вы можете пропустить подраздел «Написание сценария оболочки».

Написание сценария оболочки

Теперь давайте напишем небольшой скрипт мигания красным, затем зеленым, затем синим светодиодом RGB на Expansion Dock, и на случай, если вы пропустите первое мигание, он помигает еще раз через 5 секунд, а затем выключится.

Вот как это выглядит:

#!/bin/sh -e

expled 0xff0000 #Red

expled 0x00ff00 #Green

expled 0x0000ff #Blue

sleep 5 #wait five seconds

expled 0xff0000 #Red

expled 0x00ff00 #Green

expled 0x0000ff #Blue

expled 0x000000 #Off

Создайте в командной строке файл с помощью vi /root/rgb-led.sh и вставьте приведенный выше код во вновь созданный файл. Сохраните и выйдите из файла, в командной строке введите следующую команду:

chmod + x /root/rgb-led.sh

Эта команда позволит запустить ваш скрипт как программу.

Написание crontab

Чтобы начать работу с cron, введите в командной строке следующую команду:

crontab -e

Если вы никогда ранее не работали с cron, появится пустой файл. Первое, что нам нужно сделать, - обозначить команду для запуска с интервалом. Давайте изменим цвет светодиода на панели расширения с помощью expled. В пустом файле введите следующее:

#

*/1 * * * * /root/rgb-led.sh

# Убедитесь, что у вас есть этот комментарий в конце crontab

Сохраните и выйдите из файла. Затем перезапустите cron с помощью следующей команды, чтобы применить изменения:

/etc/init.d/cron restart

Ваш код запустится не позднее, чем через 59 секунд, потому что cron будет ждать следующей минуты для запуска (например, 6:05:59, 6:06:00)

Синтаксис для crontab

Итак, давайте разберемся, как cron будет читать файл crontab. Вот краткий обзор того, как работает синтаксис cron:

# * * * * *  команда для выполнения

# ┬ ┬ ┬ ┬ ┬

# │ │ │ │ │

# │ │ │ │ │

# │ │ │ │ └───── день недели (0 - 7) (0 – воскресенье, 6 - суббота, 7 – каждый день)

# │ │ │ └────────── месяц (1 - 12)

# │ │ └─────────────── число месяца (1 - 31)

# │ └──────────────────── час (0 - 23)

# └───────────────────────── минута (0 - 59)

 А вот несколько примеров с объяснениями:

Примеры cron

Для дней недели cron рассматривает 0 как воскресенье, а установка дней недели на 7 приводит к выполнению команды ежедневно.

Диапазоны каждого значения (мин, час и т. д.) следующие:

Диапазон значений cron

Время записывается в виде 24 часов.

Файл crontab должен заканчиваться комментарием для запуска cron.

Для получения дополнительной информации о cron, включая дополнительные правила и ссылки, вы можете обратиться к руководству OpenWRT по Cron.

Сохранение вывода задания cron в файл (опционально)

Когда запустится cron, вы не сможете увидеть вывод вашего файла. Вы можете сохранить весь вывод в файл, а не печатать его в командной строке, или вы можете направить вывод вашей команды в конкретное место назначения с помощью простой команды.

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

>> 2>&1

>> добавляет вывод вашей команды в выходной файл. 2>&1 - это индикатор для сценария оболочки о том, что вы хотите включить сообщения об ошибках в выходные данные вашей команды. По умолчанию передается только стандартный вывод.

Вы можете легко добавить это к команде cron. Введите:

crontab -e

и отредактируйте команду, чей вывод вы хотите передать.

Из предыдущего примера это будет выглядеть так:

#

*/1 * * * * /root/rgb-led.sh >> /tmp/output.txt 2>&1

#

В /tmp/output.txt мы увидим:

Setting LEDs to: ff0000

Duty: 0 100 100

> Set GPIO16: 1

> Set GPIO15: 1

Setting LEDs to: 00ff00

Duty: 100 0 100

> Set GPIO17: 1

> Set GPIO15: 1

Setting LEDs to: 0000ff

Duty: 100 100 0

> Set GPIO17: 1

> Set GPIO16: 1

Setting LEDs to: ff0000

Duty: 0 100 100

> Set GPIO16: 1

> Set GPIO15: 1

Setting LEDs to: 00ff00

Duty: 100 0 100

> Set GPIO17: 1

> Set GPIO15: 1

Setting LEDs to: 0000ff

Duty: 100 100 0

> Set GPIO17: 1

> Set GPIO16: 1

Setting LEDs to: 000000

Duty: 100 100 100

> Set GPIO17: 1

> Set GPIO16: 1

> Set GPIO15: 1

и если мы запустим скрипт /root/rgb-led.sh в командной строке, мы должны увидеть тот же результат:

root@Omega-2757:/# /root/rgb-led.sh

Setting LEDs to: ff0000

Duty: 0 100 100

> Set GPIO16: 1

> Set GPIO15: 1

Setting LEDs to: 00ff00

Duty: 100 0 100

> Set GPIO17: 1

> Set GPIO15: 1

Setting LEDs to: 0000ff

Duty: 100 100 0

> Set GPIO17: 1

> Set GPIO16: 1

Setting LEDs to: ff0000

Duty: 0 100 100

> Set GPIO16: 1

> Set GPIO15: 1

Setting LEDs to: 00ff00

Duty: 100 0 100

> Set GPIO17: 1

> Set GPIO15: 1

Setting LEDs to: 0000ff

Duty: 100 100 0

> Set GPIO17: 1

> Set GPIO16: 1

Setting LEDs to: 000000

Duty: 100 100 100

> Set GPIO17: 1

> Set GPIO16: 1

> Set GPIO15: 1

Вы можете вернуться в crontab и закомментировать строку, которая запускается каждую минуту, чтобы индикатор RGB док-станции расширения не мигал.

Важно

Не забудьте завершить файл crontab комментарием, иначе он не запустится.

Если ваша команда предполагает перезагрузку вашего Omega, пожалуйста, ознакомьтесь с этой статьёй, предоставленной OpenWRT.

Контакты

г. Москва, Пятницкое ш. д. 18, пав. 566

zakaz@compacttool.ru

8-495-752-55-22

Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !

© Все права защищены 2021г https://compacttool.ru