Автоматический запуск программ через крон на 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-го января.