Какие действия надо выполнять периодически в автоматическом режиме?

  • Создание резервных копий данных.
  • Выполнение плановых работ по обслуживанию системы / приложения: почистить кеш, пересчитать теги и т.д.
  • Выполение ротирования журналов.

Для автоматического выполнения действий можно использовать:

  1. crontab - классическое приложение, которое позволяет выполнять произвольные команды согласно расписанию.
  2. 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 и сохранять его в формате архива в резерв. Т.е. оно должно создавать резевные копии данных первого приложения.

Исходный код служб можно скачать по ссылке: службы.