如何在Linux上同步命令调用

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

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

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

通过这样的命令,我可以configurationfail2ban中的iptables-actions来等待对方,以免它们同时执行。

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

自己find了。 我正在寻找的命令叫做flock 。 我能够通过在/etc/fail2ban/action.d/iptables-multiport.conf所有iptables调用包装起来解决我的问题,如下所示:

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

现在fail2ban每次都正确启动。

从我能弄明白的方面来说,使用群集是最具可扩展性的方法,特别是当你在一个bash脚本中工作时,你的内置函数的范围非常有限。 kayahr的答案真的为我节省了很多时间,因为我有同样的问题并行运行iptables命令。