如何在 Linux 上同步命令调用

kay*_*ahr 2 linux shell iptables fail2ban

这是我需要解决的具体问题(但我的问题不同,所以即使您不知道fail2ban是什么,也请继续阅读):

我正在尝试在 linux 服务器上使用 fail2ban 来禁止对多个服务(ssh、dovecot、apache、postfix 等)的暴力攻击。现在我偶然发现了一个问题,fail2ban 似乎同时执行多个 iptables 命令(使用 Python 中的线程)并且这经常失败(特别是在启动时),其中 iptables 返回“资源暂时不可用”。错误。

我想通过“同步”对 iptables 的调用来解决这些问题。我正在寻找一个程序来创建一些互斥锁/锁定文件,并且只有当这个文件可以被创建时,它才会启动真正的命令并在命令完成后删除互斥锁文件。如果互斥文件已经存在,则程序会等待互斥文件消失,然后尝试获取它。

使用这样的命令,我可以将 fail2ban 中的 iptables-actions 配置为相互等待,这样它们就不会同时执行。

我很确定已经有这样的程序了,所以我不必自己编写。但到目前为止我还没有找到。

kay*_*ahr 6

自己找的。我正在寻找的命令称为flock. 我能够通过/etc/fail2ban/action.d/iptables-multiport.conf像这样包装所有 iptables 调用来解决我的问题:

flock /var/lock/fail2ban -c "iptables -N fail2ban-<name>"
Run Code Online (Sandbox Code Playgroud)

现在fail2ban 每次都能正确启动。