Portál AbcLinuxu, 8. listopadu 2025 11:39
#!/usr/bin/env python
import time
def is_conn_established(port):
retvalue = False
for line in file('/proc/net/tcp'):
spl = line.split()
if spl[3] != '01': continue #01 is ESTABLISHED
local_port = int(spl[1].split(':')[1], 16)
if local_port == port:
retvalue = True
break
return retvalue
def run_fetchmail():
print 'running fetchmail'
while True:
if is_conn_established(993):
run_fetchmail()
delay = 3 * 60
else:
print 'nothing to do'
delay = 1
time.sleep(delay)
Program každou sekundu sleduje, zda je navázáno tcp spojení na sledovaný port (v mém případě 993) a pokud ano, tak pustí fetchmail a interval sledování prodlouží na tři minuty. Jestliže spojení navázáno není, nic se nespouští a spojení se kontroluje opět jednou za sekundu.Ještě nutno poznamenat, že periodicky kontrolovat, zda něco je či není, je poněkud neefektivní a ošklivé. To se týká právě sledování pomocí netstat, lsof nebo podobných nástrojů.Obecně s tím souhlasím, ale přesto to tak v tomto případě dělám. Aby byla nějaká názorná představa, tak jedno otestování trvá asi milisekundu, přičemž nespouštím žádný externí program (stačí poslat signál fetchmailu) ani nijak nehrabu na disk a nepotřebuji práva roota.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.