Выполнение переодический действий
Какие действия надо выполнять периодически в автоматическом режиме?
- Создание резервных копий данных.
- Выполнение плановых работ по обслуживанию системы / приложения: почистить кеш, пересчитать теги и т.д.
- Выполение ротирования журналов.
Для автоматического выполнения действий можно использовать:
crontab
- классическое приложение, которое позволяет выполнять произвольные команды согласно расписанию.systemd
, подсистемаtimes
.
Создание системных скриптовых приложений на Ruby
Что нам нужно от таких приложений?
- Эффективно управлять файлами на файловой системе.
- Возможность легко запускать внешние приложения и обрабатывать их ответы.
Для работы с файлами в Ruby у нас есть:
- Класс File, который позволяет взаимодействовать с содержимым файла, http://ruby-doc.org/core-2.6.1/File.html
- Класс Dir, который позволяет просматривать содержимое каталогов, http://ruby-doc.org/core-2.6.1/Dir.html
- Модуль FileUtils, входящий в библиотеку
fileutils
, который позволяет выполнять массовые действия над файлами в рамках файловой системы. http://ruby-doc.org/stdlib-2.6.1/libdoc/fileutils/rdoc/FileUtils.html
Для запуска внешних приложений в Ruby есть:
- Использование обратных кавычек для запуска команд, например
ls /var/log
, http://ruby-doc.org/core-2.6.1/Kernel.html#method-i-60 - Использование метода
Kernel#system
, http://ruby-doc.org/core-2.6.1/Kernel.html#method-i-system, который позволяет выполнять команды как в shell, так и без него.
В отличие от system обратные кавычки позволяют программисту обработать вывод приложения.
Помимо этого есть ещё низкоуровневый инструмент - библиотека open3
, http://ruby-doc.org/stdlib-2.6.1/libdoc/open3/rdoc/Open3.html
Эмитируем работу сложной системы
Пусть у нас есть 2 приложения. 1 приложение изображает из себя сложную систему, которая записывает данные в журнал. В журнал записывается информация каждые 5 секунд - текущее время. Журнал разделён на файлы, причём в файл можно записывать не более 10 записей.
После заполнения файла открывается новый файл с увеличенным индексом.
2 приложение должно собирать журнал работы 1 и сохранять его в формате архива в резерв. Т.е. оно должно создавать резевные копии данных первого приложения.
Исходный код служб можно скачать по ссылке: службы.