Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Подписка на события в системе в Linux  (Прочитано 1218 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн barmaley99

  • Автор темы
  • Участник
  • *
  • Сообщений: 102
    • Просмотр профиля
Всем привет, подскажите возможно ли в Linux и как осуществить подписку на какое либо событие - т.е. когда событие происходит система вызывает программу подписавшуюся на это событие, в винде есть такое, можно конечно заранее запустить скрипт вставить в цикле sleep и проверку на событие но это в наше время во первых будет неграмотно, в винде уже так давно очень редко делают, во вторых будет сьедать немного ресурсов системы впустую, в частности например хочу сделать автоматическое сохранение правил iptables - только в правила внесены какие то изменения - система сразу вызывает мой простенький скрипт в котором прописано сохранение настроек - iptables-save >...
Так как в линуксе вся система и её настройки - это файлы то я так понимаю что для проверки настроек iptables на предмет изменения надо мониторить состояние какого то из файлов в /proc/net/  - как только файл с настройками iptables изменен вызывается мой скрипт, но какой там из файлов отвечает за настройки iptables тоже непойму

Оффлайн Dzhoser

  • Старожил
  • *
  • Сообщений: 2429
    • Просмотр профиля

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #2 : 21 Май 2020, 11:27:15 »
во вторых будет сьедать немного ресурсов системы впустую
А то что будет мониторить не будет "съедать ресурсы"? Или оно в небесных садах находится, а в системы прилетает исключительно в виде святого духа?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Dzhoser

  • Старожил
  • *
  • Сообщений: 2429
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #3 : 21 Май 2020, 11:37:01 »
А то что будет мониторить не будет "съедать ресурсы"?
Если система сама скажет об изменениях.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #4 : 21 Май 2020, 11:42:07 »
система сама
Ну просто как дети малые... Да, тот же inotify - это подсистема ядра, но вызовы что-то должно обработать? Поэтому есть inotifywait, incron, и т.д.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Dzhoser

  • Старожил
  • *
  • Сообщений: 2429
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #5 : 21 Май 2020, 11:48:26 »
Да вызовы должны обрабатываться, но в bash  это будет медленнее.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #6 : 21 Май 2020, 11:53:29 »
в bash  это будет медленнее
Аргументируете? Или "просто Вы не умете их готовить"?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Dzhoser

  • Старожил
  • *
  • Сообщений: 2429
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #7 : 21 Май 2020, 11:59:27 »
 На bash
Цитировать
#!/bin/bash

SRC_DIR="/home"
DST_DIR="/backup"

# Функция, которая будет выполнять необходимые действия
# В нашем случае копировать в другую директорию
make_action(){
    # Получаем директорию назначения
    DIR_TO_COPY_TO=${1/${SRC_DIR}/${DST_DIR}}
    # Создаем ее, если ее еще не существует
    mkdir -p $DIR_TO_COPY_TO
    # Копируем файл
    cp $1$2 $DIR_TO_COPY_TO
}

IFS='
'
# Отслеживаем закрытие файлов после записи
# Получаем вывод в нужном нам формате
inotifywait -e close_write --format '%w %f' -m -r $SRC_DIR |\
(
while read
do
    # Получаем имя директории
    DIR=$(echo $REPLY | cut -f 1 -d' ')
    # Получаем имя файла
    FILE=$(echo $REPLY | cut -f 2 -d' ')
    # Передаем имена директории и файла в функцию
    make_action $DIR $FILE
done
)
на С предлагаю скомпилировать самому и сравнить

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #8 : 21 Май 2020, 12:23:49 »
Dzhoser, чет Вы куда-то завернули не туда. При чем здесь С? Мы говорили про то, что любое "отслеживание" занимает часть ресурсов системы: будь то цикл, cron, inotify или что-то еще.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 750
    • Просмотр профиля
Re: Подписка на события в системе в Linux
« Ответ #9 : 21 Май 2020, 13:36:12 »
Пример с iptables странный. Обычно все делают наоборот. Т.е. изменяют файл настроек и его применяют. Т.е. в твоем случае у тебя есть файл, из которого ты делаешь iptables-restore - вот и правь его и выполняй скрипт.
А еще лучше IaC - Ansible и все в этом духе

 

Страница сгенерирована за 0.078 секунд. Запросов: 25.