/crontab_updater

Утилита командной строки, позволяющая редактировать crontab jobs

Primary LanguagePythonMIT LicenseMIT

crontab_updater

Утилита командной строки, позволяющая редактировать crontab jobs. В текущей версии рассчитана только на работу со скриптами на Python. Добавленная таким образом задача по итогам работы записывает stdout и stderr процесса в отдельные файлы. Утилита создана для того, чтобы редактировать crontab не с помощью текстового редактора, а путем запуска питоновского скрипта, которому передаются нужные аргументы. Также создаются бэкапы старых кронтабов, которые при необходимости можно восстановить.

Требования

Python3.8+

Установка

  • git clone ...
  • В полученной директории crontab_updater нужно создать файл template.py с шаблоном для индивидуальных настроек (добавлен в .gitignore).

Пример содержимого template.py:

TEMPLATE = "{timelet} /path_to_my_virtual_environment/bin/python /path/{proj}/{script}.py > /path/{proj}/{script}.log 2> path/{proj}/{script}.err\n"
  • {timelet} - переменная, в которую будет добавляться паттерн, определяющий регулярность запуска задачи
  • {proj} - название директории проекта, в которой находится нужный скрипт
  • {script} - название скрипта, без расширения (предполагается, что это всегда питоновский скрипт, то есть расширение автоматически ставится как .py)

В результате одного запуска утилиты в сrontab появляется новая строка вида:

* * * * * /home/my_user/my_project/venv/bin/python /home/my_user/path_to_my_project/my_script.py > /home/my_user/path_to_my_project/my_script.log 2> /home/my_user/path_to_my_project/my_script.err

Основные возможности

  • python crontab_updater.py печатает инструкцию;
  • python crontab_updater.py restore восстанавливает crontab из последнего бэкапа. Если бэкапов еще нет, вернется трейсбек, сообщающий о том, что восстанавливать не из чего:
RuntimeError: There are no backups in crontabs; aborting restore
  • python crontab_updater.py add "0 9 * * *" my_dir my_script добавляет новую задачу в кронтаб: скрипт my_dir/my_script.py будет запускаться ежедневно в 9 утра.
  • python crontab_updater.py del my_dir my_script или python crontab_updater.py del "0 9 * * *" my_dir my_script удаляет задачу с идентификатором по директории, названию скрипта либо времени запуска, директории и названию скрипта;
  • python crontab_updater.py dump бэкапит текущий кронтаб. Если в настоящий момент еще нет кронтаба, то вернется трейсбек, сообщающий об этом:
RuntimeError: There are no crontabs; aborting dump
  • python crontab_updater.py sort сортирует задачи в кронтабе по возрастанию.

Бэкапы

Каждое редактирование кронтаба с помощью утилиты приводит к созданию бэкапа старого кронтаба. Бэкапы сохраняются в папке crontab_updater/crontabs. Их названия имеют вид crontab20221005135833518552, где цифры после префикса - это преобразованные дата и время создания бэкапа. По умолчанию сохраняется 10 последних бэкапов.

Кастомизация

Работа утилиты определяется классом CrontabUpdater. Изменить название директории бэкапов, префиксы файлов и их максимальное число можно путем передачи этому классу новых параметров, а именно:

  • dirname - название директории бэкапов (по умолчанию crontabs)
  • prefix - префикс названия файла с бэкапом (по умолчанию crontab)
  • filelim - максимальное число бэкапов (по умолчанию 10)