iptables: Resource temporarily unavailable.问题
执行iptables规则时失败,出现错误提示 iptables: Resource temporarily unavailable.
问题
出现此种怪问题,第一反应就是:“发生了什么?我什么都没改。没道理呀。”
Resource temporarily unavailable.的错误打印对应错误码EAGAIN,就出叫你出现这个错了在试一遍的意思。我的感觉是,iptables规则作为系统全局共享组件,在设置时,内核肯定会有锁机制来解决并发问题。既然如此,那就写个脚本并发iptables试一试看有问题没。
测试脚本
#!/bin/shiptables -t filter -N TESTTTTTTTT1 & iptables -t filter -N TESTTTTTTTT2 & iptables -t filter -N TESTTTTTTTT3 & iptables -t filter -N TESTTTTTTTT4 & iptables -t filter -N TESTTTTTTTT5 & iptables -t filter -N TESTTTTTTTT6 &iptables -t filter -X TESTTTTTTTT1 & iptables -t filter -X TESTTTTTTTT2 & iptables -t filter -X TESTTTTTTTT3 & iptables -t filter -X TESTTTTTTTT4 & iptables -t filter -X TESTTTTTTTT5 & iptables -t filter -X TESTTTTTTTT6 &
脚本很简单,创建链,然后删除链。每条规则都放后台执行,运行几遍就能复现iptables: Resource temporarily unavailable.
的问题。
板子上跑起来有问题,想着虚拟机跑下试试,虚拟机跑也有问题,不过虚拟机会有让加-w参数的提示:
Another app is currently holding the xtables lock. Perhaps you want to use the -w option?
Another app is currently holding the xtables lock. Perhaps you want to use the -w option?
Another app is currently holding the xtables lock. Perhaps you want to use the -w option?
这里已经很明显的告诉我们,多个进程争夺xtables lock,iptables执行失败,可以通过-w参数来让进程在失败时wait一下。
修改方法
查看虚拟机里面的iptables版本为1.4.21, 板子里面的iptables版本为1.4.4,然后下载了1.4.21的源码下来
1.4.21的锁机制
通过创建unix域套接字然后bind来实现,但是我本地测试这段代码却有问题。原因在于:域套接字在进程退出后不会销毁该套接字对应的文件,下次bind就会失败,如果调用unlink来处理,套接字文件又会里面被清掉,bind总是成功,无法起到锁的作用。(所以这里不懂1.4.21这一版的原理究竟是啥)
想来想去,没什么好办法,又下载了最新的iptables源码
1.6.1的锁机制
通过flock实现。查了下flock,发现这就是我需要的。flock锁的销毁会随着文件描述符销毁而销毁,所以即便进程意外退出了,也不用担心会有锁残留的问题。于是可以写出iptables应用层加锁的代码来:
void xtables_try_lock(void) {int fd;int i = 0;int sleep_time_ms = 50;int wait_time_sec = 10;int wait_cnt = wait_time_sec*1000 / sleep_time_ms;fd = open(XT_LOCK_NAME, O_CREAT, 0600);if (fd < 0)return;for(i = 0; i < wait_cnt; i++){if(!flock(fd, LOCK_EX | LOCK_NB))return;usleep(sleep_time_ms * 1000);}printf("## BUG! Another app is currently holding the xtables lock long time!\n");return; }
把这个锁放在iptables就ok了。
iptables: Resource temporarily unavailable.问题相关推荐
- Samba amp; Nginx - Resource temporarily unavailable
先说说本人的开发环境:Win7 + Editplus + VMware(Centos+Samba+Nginx).用Samba在Centos上把web文件夹(如www)共享,然后在Win7上訪问这个文件 ...
- Resource temporarily unavailable 错误
2019独角兽企业重金招聘Python工程师标准>>> [root@namenode01 backup]# su - app Last login: Tue Apr 26 09:48 ...
- python3 报错 Resource temporarily unavailable
原本python中多进程程序跑得挺好的,后来加了一部分代码,结果在运行到 lock = multiprocessing.Manager().Lock() 这一行时报出了如下错误: [0]Excepti ...
- su: cannot set user id: Resource temporarily unavailable
现象: 切换到domino notes用户时失败,提示:su: cannot set user id: Resource temporarily unavailable su - notes su: ...
- WSAEWOULDBLOCK: Resource temporarily unavailable
SAP手记三:安装过程的三个小错误 1.安装sap.oracle提示swap space不够问题 将你电脑的虚拟内存修改到足够大就可以了: 2.ECC6.0 到IMPORT ABAP出错 不管三七二十 ...
- OpenWrt——Could not lock /var/lock/opkg.lock: Resource temporarily unavailable.
问题描述 root@OpenWrt:~# opkg update Collected errors:* opkg_conf_load: Could not lock /var/lock/opkg.lo ...
- v4l打开video设备 ,执行VIDIOC_DQBUF,出现Resource temporarily unavailable 问题
如果你在执行VIDIOC_DQBUF突然提示以下错误: error: VIDIOC_DQBUF: Resource temporarily unavailable 那么很可能是你使用非阻塞方式打开设备 ...
- Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
第一次鼓捣Docker,- - ! 报错: server@ubuntu1987:~$ sudo apt-get update E: Could not get lock /var/lib/apt/li ...
- 关于Ubuntu中 E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)解决方案
在Ubuntu中,有时候运用sudo apt-get install 安装软件时,会出现一下的情况 E: Could not get lock /var/lib/dpkg/lock - open ( ...
最新文章
- 分布式架构spring mvc +mybatis +shiro+ Activiti +Alibaba Druid
- MySQL绿色版的应用
- 计算机教师队伍掌握的素质,多措并举,努力打造高素质计算机教师x队伍.doc
- springboot默认数据源如何设置连接数_Spring Boot系列之配置数据库连接池
- mysql中b树是什么_MySQL优化中B树索引知识点总结
- QT 笔记6 | Qt网络编程
- PicGo的安装与使用
- 基于JAVA实现的图形化页面置换算法
- Unity 5如何设置物体透明
- 原始混合合成器:Arturia Analog Lab for Mac
- 企业微信号发消息给指定成员
- 正确率/精度(precision),召回率(recall),F1-score,ROC 曲线,AUC值
- 通过URL传参(参数也是URL)
- Fiddler的下载与基本使用方法
- 用史上最牛学习法自学编程,不香吗?
- 为Ubuntu安装Realtek的无线网卡驱动
- 解决ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broke
- MatLab的双目相机标定和orbslam双目参数匹配
- 软件测试:测试用例设计-抽奖功能
- 归纳法证明Nicomachus
热门文章
- python3 django html 中文乱码_解决django后台管理界面添加中文内容乱码问题
- 一个form 如何做两次提交_如何做一个好父母
- python群发邮件 不进垃圾箱_实战邮箱群发2000封邮件不进垃圾箱
- c++成员声明中的非法限定名_new 一个对象有哪两个过程?很多人在面试中都问住了...
- python输入变量输出常量_Python输入input、输出print
- matlab norm函数_Matlab测夹角
- arraylist从大到小排序_为什么插入排序比冒泡排序更受欢迎?
- H3C 典型数据链路层标准
- 使用Jquery中ajax实现上传文件
- 使用Intellij idea新建Java Web项目(servlet) 原理及初步使用