Регулярный запуск задач — cron
На прошлой неделе я показал вам, как запускать что-либо при каждой загрузке Raspberry Pi. Это не единственный способ; есть ещё „cron“. Но cron — это на самом деле более мощная команда: она позволяет запускать что угодно с регулярным интервалом, будь то каждую минуту, час, день, месяц или день недели!
„cron“ — это сокращение от „chronograph“, то есть „хронограф“ или „часы“. Это демон (фоновый процесс), который позволяет планировать выполнение команд в определённое время. Эти события перечислены в файле, известном как „crontab“, что является сокращением от „cron table“ (таблица cron).
Просмотр расписания
Чтобы увидеть, что уже запланировано для выполнения, откройте окно терминала и выполните следующую команду:
crontab -l
которая, если вы ещё ничего не настраивали, будет содержать только комментарии:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
Эта команда покажет только те задачи, которые запланированы для текущего пользователя. Если вы хотите увидеть, что запускается от имени пользователя root, используйте:
sudo crontab -l
Редактирование crontab
Чтобы отредактировать содержимое файла crontab, используйте:
crontab -e
(или sudo crontab -e для пользователя root).
Это откроет файл crontab в редакторе nano. Формат каждой строки должен быть следующим:
m h dom mon dow command
Где каждый параметр разделён пробелом и имеет следующие значения:
m— минута (от 0 до 59)h— час (в 24-часовом формате, от 0 до 23)dom— день месяца (от 1 до 31)mon— месяц (от 1 до 12, или трёхбуквенное сокращение — jan, feb, mar и т.д.)dow— день недели (от 0 до 6, где 0 — воскресенье, 1 — понедельник и т.д., или трёхбуквенное сокращение — sun, mon, tue и т.д.)command— команда для выполнения
Специальные форматы
Помимо отдельных чисел для каждого из первых 5 параметров, вы также можете использовать следующие специальные форматы:
Последовательность чисел, разделённых запятой — например, 0,15,30,45
Диапазон — например, 4-8
Последовательность диапазонов — например, 0-15,30-45
Звёздочка, означающая «все» — например, *
Каждый n-й раз, добавив суффикс /c — например, */5 для каждой 5-й минуты.
Примечание
Вы не можете использовать трёхбуквенные сокращения в диапазонах.
Примеры
Примеры включают:
* * * * * command— запускается каждую минуту30 * * * * command— запускается каждые 30 минут30 9 * * 5 command— запускается каждую пятницу в 9:30 утра
Использование команд
Сама команда может быть любой командой оболочки — то есть тем, что вы вводите в окно терминала, или „shell“. Следующее простое задание cron записывает текущую дату в файл „file“ в вашей домашней директории каждую минуту:
* * * * * date >> file
Вы можете наблюдать за обновлением файла каждую минуту с помощью следующей команды:
tail -f ~/file
Запуск при перезагрузке
Вы также можете использовать специальный макрос времени @reboot, который запускает команду каждый раз, когда ваш Raspberry Pi перезагружается. Например:
@reboot echo 'Rebooted' >> ~/file
Вы даже можете запускать Python-файлы, используя команды точно так же, как вы запускали бы их из командной строки, так что вы могли бы, например, подключить светодиод (через резистор) и заставить его мигать каждый час. Ваше воображение — единственное ограничение!