Чтобы выполнить команду при создании нового файла в папке в системе Linux, можно использовать комбинацию инструментов и скриптов.
Один из распространенных подходов – использование inotify-tools, утилиты, позволяющей отслеживать события файловой системы, в сочетании со скриптом оболочки.
Вот базовая схема того, как это можно настроить:
Шаг 1: Установите inotify-tools
Сначала вам нужно установить inotify-tools.
Обычно вы можете установить его с помощью менеджера пакетов.
Например, в системах на базе Ubuntu или Debian вы можете установить его, выполнив команду:
Ранее уже рассматривали его:
🐧 Как отслеживать события файловой системы в файлах и каталогах на 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.
Например:
Это позволит сохранить скрипт запущенным, даже если вы выйдете из сеанса.
Шаг 5: Запуск скрипт в качестве службы Systemd
Чтобы запустить скрипт в качестве службы systemd в системе Linux, выполните следующие действия:
Убедитесь, что ваш скрипт написан правильно и протестирован.
Поместите его в подходящий каталог, например /usr/local/bin/.
Для этого примера предположим, что ваш скрипт будет называться monitor.sh.
Убедитесь, что он является исполняемым:
Создайте новый служебный файл systemd с помощью удобного для вас текстового редактора.
Например, с помощью nano:
Добавьте в файл следующее содержимое:
[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:
Включите службу, чтобы она запускалась при загрузке:
Запуск службы:
Проверьте статус вашей службы, чтобы убедиться, что она работает должным образом:
Дополнительные примечания:
- Данный скрипт является базовым примером. В зависимости от конкретных требований вам может потребоваться его модификация.
- Если вам нужен более сложный мониторинг или обработка, рассмотрите возможность использования более надежного решения или языка программирования.
- Убедитесь, что ваш скрипт является самодостаточным и не требует интерактивного ввода. Службы Systemd не предназначены для интерактивного использования.
- Если ваш скрипт пишет логи, убедитесь, что он пишет в место, к которому у него есть разрешение на доступ. В качестве альтернативы вы можете управлять записью логов с помощью возможностей ведения логов в Systemd.
см. также:
- ⚙ Установка агента OSSEC на Debian 10 Buster
- 🌐 Обзор инструментов мониторинга дефейса веб-сайтов для повышения безопасности
- 🔐 autossh: Запуск, мониторинг и перезапуск SSH-соединений
- 💻 Conky – инструмент системного мониторинга Linux
- 🐧 Использование CRON для мониторинга и уведомления о состоянии служб на Linux
- 🖧 Arpwatch – мониторинг активности Ethernet {IP и Mac-адрес} на Linux
- 🐧 Скрипт Bash для мониторинга использования процессора и памяти на Linux
- 🐳 Мониторинг и управление Docker контейнерами – обзор инструментов CLI