В linux (ubuntu) возможно ли выполнить скрипт при любом входящем сетевом соединении?
В течение длительного периода бездействия на моем домашнем сервере я планирую остановить программный рейд, парковать диски с данными и перезапустить массив рейдов при обнаружении входящего сетевого подключения.
Я исследовал эту проблему и пока не нашел подходящего решения, любая помощь приветствуется.
Neil
Примечание: я знаю, что останавливать / запускать массив необязательно, и есть недостатки (износ диска ...). Тем не менее, я настроен по-своему, пожалуйста, не размещайте посты с советами не останавливать / запускать диски.
Редактировать (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'