Утилита командной строки, позволяющая редактировать 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.errpython 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)