在linux(ubuntu)上,是否可以在任何传入的网络连接上执行脚本?
在我的家庭服务器长时间不活动期间,我计划在遇到传入的网络连接时停止软件raid,停放数据磁盘并重新启动raid阵列。
我一直在研究这个问题,但还没有找到合适的解决方案,我们非常感谢任何帮助。
尼尔
注意:我知道停止/启动阵列是不可靠的,并且存在缺点(磁盘磨损和撕裂......)。但是我按照我的方式设置,请不要发布建议我不要停止/启动磁盘。
修改(1):
以为我会分享我的意见,希望得到一些反馈。
我想我需要使用xinetd绑定一个 catcher 脚本来捕获所有端口上的传入连接数据,启动我的 launch 脚本并将传入的连接数据传递给该港口的相关服务。唯一的问题是我不知道我需要捕获哪些数据或者如何在python中使用。
编辑(2): 我使用python库pypcap http://code.google.com/p/pypcap/一起破解了一个解决方案。供将来参考,以下是代码。
import pcap
...
pc = pcap.pcap(name)
pc.setfilter(' '.join(args))
pc.setnonblock()
try:
for ts, pkt in pc:
# subprocess.call([filename, args])
print 'readying disks...'
break
except OSError, ValueError:
print 'Error: invalid arguements passed to subprocess'
except KeyboardInterrupt:
print 'Error: keyboard interupt'
答案 0 :(得分:1)
看看netfilter / iptables。您可以编写代码来使用用户空间API库来检测传入的数据包事件。