Автоматический запуск программ через крон на Raspberry Pi

Автоматический запуск программ через крон на Raspberry Pi

Здесь рассматривается автоматический запуск программ при загрузке или через заданные интервалы времени на Raspberry Pi с помощью крона.

Что такое крон (Cron)?

Необходимость автоматизации задач на Raspberry Pi особенно актуальна в сфере встроенных систем, прежде всего в приложениях, где требуется минимум настроек.

Cron — это стандартная утилита для планирования задач в операционных системах на базе Linux, включая Raspberry Pi OS.

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

Кроме того, крон повсеместно используется разработчиками самых разных направлений — от веб-программирования до робототехники.

Запуск программы при старте

Шаг 1. Откройте crontab (кронтаб) с помощью следующей команды:

$ sudo crontab -e

Crontab предоставляет возможность просматривать и редактировать файл таблицы cron. Файл таблицы cron содержит перечень запланированных задач для конкретного пользователя на устройстве. Такой файл имеется даже у пользователя root.

Шаг 2.

Далее необходимо выбрать текстовый редактор.

Терминал должен предложить выбрать предпочтительный текстовый редактор при использовании командной строки через сочетание клавиш ALT + F1. Однако некоторые терминалы могут не предлагать выбор, а сразу открыть файл в редакторе Nano. Выбор конкретного текстового редактора не принципиален, поэтому используйте тот, с которым вам комфортнее работать.

Шаг 3. Затем в конце файла укажите программу, которую нужно запускать при загрузке.

@reboot python3 /home/pi/filename.py

Для запуска программы при загрузке строка должна начинаться с @reboot. Далее указывается нужная команда. В данном примере запускается python3 для вызова интерпретатора python3, после чего указывается путь к скрипту.

Шаг 4. В завершение сохраните файл и выйдите из редактора.

Для запуска программы при старте системы необходимо иметь разрешение an на выполнение приложения и файла. Проверить права доступа можно командой ls -l. Если нужного разрешения нет, добавьте его командой:

$ sudo chmod a+x FILENAME

Регулярный запуск программы

Шаг 1. Откройте crontab (кронтаб):

$ sudo crontab -e

Шаг 2. Выберите текстовый редактор.

Шаг 3. Добавьте запланированное задание.

Для этого необходимо ознакомиться с форматом записей таблицы cron. Обратите внимание на последнюю строку:

# m h  dom mon dow   command

Структура записи cron включает шесть компонентов: минуты, час, день месяца, месяц года, день недели и выполняемая команда.

# * * * * *  command to execute
# ┬ ┬ ┬ ┬ ┬
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ └───── day of week (0 - 7) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
# │ │ │ └────────── month (1 - 12)
# │ │ └─────────────── day of month (1 - 31)
# │ └──────────────────── hour (0 - 23)
# └───────────────────────── min (0 - 59)

К примеру, если нужно запускать программу filename.py каждый день в 3 часа дня, запись будет выглядеть следующим образом:

0 15 * * *  python3 /home/pi/filename.py

Шаг 4. Сохраните файл и выйдите.

Шаг 5. Для просмотра текущих запланированных задач выполните следующую команду:

crontab -l

Примеры использования крона

Пример 1. Для запуска задания cron каждые 5 минут добавьте:

*/5 * * * * <command-to-execute>

Пример 2. Для запуска задания cron каждую четверть часа (каждые 15 минут) добавьте:

*/15 * * * * <command-to-execute>

К примеру, если сейчас 11:00, следующие запуски произойдут в 11:15, 11:30, 11:45 и далее.

Пример 3. Для запуска cron-задания каждый час на 30-й минуте:

30 * * * * <command-to-execute>

К примеру, если сейчас 10:00, следующие запуски произойдут в 10:30, 11:30, 12:30 и далее.

Пример 4. Также можно указать несколько временных точек через запятую. Следующее задание cron будет выполняться трижды каждый час — на 0, 5 и 10 минутах:

0,5,10 * * * * <command-to-execute>

Пример 5. Запуск cron-задания каждые полчаса (каждые 30 минут):

*/30 * * * * <command-to-execute>

К примеру, если сейчас 10:00, задание запустится в 10:30, 11:00, 11:30 и далее.

Пример 6. Запуск задания каждый час (на 0 минуте):

0 * * * * <command-to-execute>

К примеру, если сейчас 10:00, следующие запуски произойдут в 11:00, 12:00, 13:00 и далее.

Пример 7. Запуск задания каждые 2 часа:

0 */2 * * * <command-to-execute>

К примеру, если сейчас 10:00, следующий запуск состоится в 12:00.

Пример 8. Ежедневный запуск задания (выполняется в 00:00):

0 0 * * * <command-to-execute>

Пример 9. Выполнение задания каждый день в 3 часа ночи:

0 3 * * * <command-to-execute>

Пример 10. Выполнение задания каждое воскресенье:

0 0 * * SUN <command-to-execute>

или

0 0 * * 0 <command-to-execute>

Запуск произойдёт ровно в 00:00 в воскресенье.

Пример 11. Выполнение задания по будням (с понедельника по пятницу):

0 0 * * 1-5 <command-to-execute>

Пример 12. Ежемесячное выполнение задания (в 00:00 1-го числа каждого месяца):

0 0 1 * * <command-to-execute>

Пример 13. Запуск задания в 16:15 первого числа месяца:

15 16 1 * * <command-to-execute>

Пример 14. Ежеквартальное выполнение задания (1-го числа каждые 3 месяца):

0 0 1 */3 * <command-to-execute>

Пример 15. Запуск задания в определённый месяц в заданное время:

5 0 * 4 * <command-to-execute>

Задание запустится в 00:05 в апреле.

Пример 16. Выполнение задания раз в полгода:

0 0 1 */6 * <command-to-execute>

Данное задание cron будет запускаться в 00:00 1-го числа каждого 6-го месяца.

Пример 17. Ежегодное выполнение задания:

0 0 1 1 * <command-to-execute>

Задание cron запустится в 00:00 1-го января.