Cron запускает команды по повторяющемуся расписанию без интерактивной оболочки. Автоматизация повторяет и правильные действия, и ошибки, поэтому до планирования протестируйте команду, используйте явные пути, ограничьте привилегии и спланируйте журналирование и уведомления о сбоях.
Использование процессов · Урок 8
Задания cron
Узнайте, как создавать, проверять, тестировать и безопасно эксплуатировать повторяющиеся задания cron.
Чтение записи crontab
Запись пользовательского crontab содержит пять полей времени, за которыми идёт команда:
30 8 * * * /home/pete/scripts/change_wallpaper
Слева направо поля обозначают минуту, час, день месяца, месяц и день недели. Этот пример запускается в 08:30 согласно применимому часовому поясу демона cron. Звёздочка означает каждое допустимое значение поля.
Когда ограничены и день месяца, и день недели, многие реализации cron запускают задание при совпадении любого из полей. Проверяйте локальную семантику до создания расписания, использующего оба.
Когда запускается 30 8 * * * command?
Управление пользовательским crontab
Отредактируйте crontab текущего пользователя:
$ crontab -e
Перечислите установленные записи до и после изменения:
$ crontab -l
crontab -r удаляет весь crontab пользователя и может сделать это без редактора. Не используйте её для удаления одной строки; отредактируйте crontab и проверьте оставшиеся записи.
Какая команда перечисляет установленные записи cron текущего пользователя?
Учёт окружения cron
Cron обычно предоставляет ограниченное окружение и неинтерактивную оболочку. Используйте абсолютные пути команд и файлов, явно задавайте необходимые переменные и не полагайтесь на псевдонимы, текущий каталог терминала или файлы запуска оболочки.
Перенаправляйте стандартный вывод и ошибки в контролируемый журнал или используйте подходящий системе механизм уведомлений. Защищайте учётные данные строгими правами и не встраивайте секреты непосредственно в команду crontab.
Зачем команде cron использовать явные пути и параметры окружения?
Тестирование и предотвращение перекрытия
Запустите скрипт вручную от имени того же пользователя в похожем минимальном окружении. Настройте полезные коды завершения и результаты с временными метками. После установки дождитесь безвредного тестового расписания или контролируемого запуска и проверьте настоящее побочное действие и журналы.
Если один запуск может длиться дольше интервала, спроектируйте конкурентное выполнение или используйте механизм блокировки, например доступный flock:
*/5 * * * * /usr/bin/flock -n /run/user/1000/report.lock /home/pete/bin/report
Выберите путь блокировки, который пользователь задания может безопасно создать, и решите, допустимы ли пропущенные запуски. Cron не гарантирует автоматически работу только одного экземпляра.
Какой риск возникает, когда задание работает дольше своего интервала расписания?
Выбор подходящего планировщика
Cron подходит для простых повторяющихся команд. Таймеры systemd могут обеспечивать интеграцию зависимостей, выполнение пропущенных запусков, случайную задержку и журналирование в journal на хостах с systemd. Планировщики приложений или кластеров могут быть безопаснее, если задание должно выполниться ровно один раз на нескольких машинах.
Почему обычный cron на каждом хосте может не подходить кластерному заданию с ровно одним выполнением?
Урок завершён
Вы завершили Задания cron
Теперь вы можете эксплуатировать повторяющееся задание cron с явными предположениями о расписании и выполнении.
Читайте пять полей времени в установленном порядке.
Проверяйте и редактируйте пользовательские crontab, не удаляя посторонние задания.
Задавайте пути, окружение, журналирование и работу с учётными данными.
Тестируйте от имени пользователя задания и защищайтесь от нежелательного перекрытия.
Выбирайте планировщик, соответствующий требованиям хоста и координации.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт