Portál AbcLinuxu, 10. května 2025 08:10
#!/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.