Назад | Перейти на главную страницу

Как синхронизировать вызовы команд в Linux

Это моя конкретная проблема, которую мне нужно решить (но мой вопрос другой, поэтому, пожалуйста, продолжайте читать, даже если вы не знаете, что такое fail2ban):

Я пытаюсь использовать fail2ban на сервере Linux, чтобы запретить атаки грубой силы на несколько служб (ssh, dovecot, apache, postfix, ...). Теперь я столкнулся с проблемой, что fail2ban, кажется, выполняет несколько команд iptables одновременно (с потоками в Python), и это довольно часто терпит неудачу (особенно при запуске), когда iptables возвращает «Ресурс временно недоступен». ошибки.

Я хочу обойти эти проблемы, "синхронизируя" вызовы iptables. Я ищу программу, которая создает некоторый файл мьютекса / блокировки, и только если этот файл может быть создан, он запускает настоящую команду и удаляет файл мьютекса после завершения команды. Если файл мьютекса уже существует, программа ожидает, пока файл мьютекса не исчезнет, ​​а затем пытается получить его.

С помощью такой команды я мог бы настроить iptables-actions в fail2ban на ожидание друг друга, чтобы они не выполнялись одновременно.

Я почти уверен, что такая программа уже существует, поэтому мне не нужно писать ее самостоятельно. Но пока не нашел.

Нашел сам. Команда, которую я искал, называется flock. Мне удалось решить свою проблему, заключив все вызовы iptables в /etc/fail2ban/action.d/iptables-multiport.conf как это:

flock /var/lock/fail2ban -c "iptables -N fail2ban-<name>"

Теперь fail2ban запускается каждый раз правильно.

Из того, что я мог понять, использование flock - это наиболее масштабируемый способ, особенно когда вы работаете в сценарии bash, где у вас есть очень ограниченный набор встроенных функций, к которым можно прибегнуть. Ответ kayahr действительно сэкономил мне много времени, так как у меня была такая же проблема с параллельным запуском команд iptables.