🐧 Как следить за каталогом на предмет создания новых файлов в Linux

Чтобы выполнить команду при создании нового файла в папке в системе Linux, можно использовать комбинацию инструментов и скриптов.

Один из распространенных подходов – использование inotify-tools, утилиты, позволяющей отслеживать события файловой системы, в сочетании со скриптом оболочки.

Вот базовая схема того, как это можно настроить:

Шаг 1: Установите inotify-tools

Сначала вам нужно установить inotify-tools.

Обычно вы можете установить его с помощью менеджера пакетов.

Например, в системах на базе Ubuntu или Debian вы можете установить его, выполнив команду:

sudo apt update
sudo apt install inotify-tools

Ранее уже рассматривали его:

🐧 Как отслеживать события файловой системы в файлах и каталогах на Linux

Шаг 2: Создание скрипта

Далее создайте bash скрипт, который использует inotifywait (часть inotify-tools) для мониторинга каталога на предмет новых файлов и затем вызывает API при обнаружении нового файла.

Ниже приведен простой пример того, как может выглядеть этот скрипт:

#!/bin/bash



# Папка для мониторинг

MONITOR_DIR="/path/to/your/directory"



# Ваша команда

# CUSTOM_COMMAND="curl -X POST -d @newfile http://your.api.endpoint"



# Отслеживаем новые файлы и вызываем API

inotifywait -m -e create --format '%w%f' "$MONITOR_DIR" | while read NEWFILE

do

    echo "Новый файл: $NEWFILE"

    #Снимите комментарий, чтобы выполнять пользовательские команды и вызывать API

    #eval $CUSTOM_COMMAND

done

В этом скрипте замените /path/to/your/directory на путь к папке, которую вы хотите контролировать, а http://your.api.endpoint – на конечную точку API, которую вы хотите вызвать.

Вы также можете изменить CALL_API_COMMAND, чтобы включить в нее все необходимые заголовки, данные или опции для вашего конкретного вызова API.

Шаг 3: Запустите скрипт

Сделайте скрипт исполняемым и запустите его.

Это можно сделать следующим образом:

  • Сохранить скрипт в файл, например monitor.sh.
  • Сделать его исполняемым: chmod +x monitor.sh
  • Запустить скрипт : ./monitor.sh

Шаг 4: Запуск скрипта в фоновом режиме

Если вы хотите, чтобы этот скрипт постоянно выполнялся в фоновом режиме, вы можете использовать nohup или запустить его в сеансе screen или tmux.

Например:

nohup ./monitor.sh &

Это позволит сохранить скрипт запущенным, даже если вы выйдете из сеанса.

Шаг 5: Запуск скрипт в качестве службы Systemd

Чтобы запустить скрипт в качестве службы systemd в системе Linux, выполните следующие действия:

Убедитесь, что ваш скрипт написан правильно и протестирован.

Поместите его в подходящий каталог, например /usr/local/bin/.

Для этого примера предположим, что ваш скрипт будет называться monitor.sh.

sudo mv monitor.sh /usr/local/bin/

Убедитесь, что он является исполняемым:

sudo chmod +x /usr/local/bin/monitor.sh

Создайте новый служебный файл systemd с помощью удобного для вас текстового редактора.

Например, с помощью nano:

sudo nano /etc/systemd/system/monitor.service

Добавьте в файл следующее содержимое:



[Unit]

Description=File Monitor Service



[Service]

ExecStart=/usr/local/bin/monitor.sh

Restart=always

User=nobody

Group=nogroup



[Install]

WantedBy=multi-user.target

  • Description: Краткое описание вашей службы.
  • ExecStart: Полный путь к вашему сценарию.
  • Restart (Перезапуск): Настраивает, должна ли служба перезапускаться после выхода. всегда означает, что служба будет перезапускаться независимо от кода выхода.
  • User and Group: Пользователь и группа, под которыми будет запущена служба. Возможно, вы захотите создать определенного пользователя в целях безопасности.

Сохраните и закройте файл.

Перезагрузите конфигурацию менеджера systemd:

sudo systemctl daemon-reload

Включите службу, чтобы она запускалась при загрузке:

sudo systemctl enable monitor.service

Запуск службы:

sudo systemctl start monitor.service

Проверьте статус вашей службы, чтобы убедиться, что она работает должным образом:

sudo systemctl status monitor.service

Дополнительные примечания:

  • Данный скрипт является базовым примером. В зависимости от конкретных требований вам может потребоваться его модификация.
  • Если вам нужен более сложный мониторинг или обработка, рассмотрите возможность использования более надежного решения или языка программирования.
  • Убедитесь, что ваш скрипт является самодостаточным и не требует интерактивного ввода. Службы Systemd не предназначены для интерактивного использования.
  • Если ваш скрипт пишет логи, убедитесь, что он пишет в место, к которому у него есть разрешение на доступ. В качестве альтернативы вы можете управлять записью логов с помощью возможностей ведения логов в Systemd.

см. также:



2023-12-13T09:51:42
Скрипты