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