Portál AbcLinuxu, 7. června 2024 09:39
Python znamená anglicky nějakého hada, myslím že hroznýše. Taky to znamená věštec. Známe pojem pýthie, to je byla věštkyně v Delfách. Nebo ovšem hroznýška. Správná česká výslovnost Pythona asi bude [pýton]. [paitn] je taky správná, ale anglická. Pythona mám rád, napsal jsem si v něm démona. Mám tam takovéhle řádky:
import os
A o kousek dál tohle, aby se náhodou nespustil dvakrát:
import signal
import re
import time
import string
import sys
konrad = re.compile(r"\r*\n*$")
pidfile = "/var/run/dozorce.pid"
krok = 120 # interval mezi testy v s
if os.path.exists(pidfile) :
sou = open(pidfile,"r")
r = sou.readline()
sou.close()
cislo = eval(konrad.sub("",r))
try:
os.kill(cislo,0)
except OSError:
# pidfile jsme stastne nasli, ale k nemu proces nebezi
pass
else:
sys.stderr.write( "dozorce konci protoze proces %d uz bezi\n"%cislo )
sys.exit(1)
A potom ještě tohle, aby se z něj udělal démon: vytvořím synovský proces a udělám ho vedoucím seance, čímž se zároveň odpojí od tty. Hodilo by se ještě přesměrování stdin, stdout, stderr někam jinam než je tty, ale to se dá i ve startovní skriptu.
# spustime se jako demon
p = os.fork()
if p > 0:
os.waitpid(p,os.WNOHANG)
sys.exit(0)
elif p == 0:
# jsem synovsky proces
os.setsid()
sou = open(pidfile,"w")
sou.write("%s"%os.getpid())
sou.close()
else:
sys.stderr.write( "dozorce nezdareny fork\n" )
sys.exit(2)
Načež si udělám nekonečný cyklus, vždycky udělám co potřebuju a dvě minuty počkám. Zatím potřebuju hlídat na serveru, jestli mi tam někdo nežere moc paměti. Když tak mu pošlu mail, když je to ještě horší, tak ho rovnou zabiju.
Do crona jsem si dal
33 * * * * kill -0 $(cat /var/run/dozorce.pid) || /etc/init.d/dozor start
Možná je to zbytečné, třeba crona taky nerestartuju každou hodinu z crona. Ještě to nespadlo. Při zkušebním běhu jsem si dal nižší závoru a zabilo mi to X server , u kterého jsem zrovna seděl. Jojo, hlavně že to funguje.
Tiskni Sdílej:
"Another important goal of the Python developers is making Python fun to use. "
Tak, tohle na mě dejchlo před deseti lety, když jsem se náhodou dostal ke skvěle udržovanému unixovému prostředí v CERN a nazdařbůh jsem napsal
cd /usr/local/bin ls
a viděl jsem tam něco, co vypadalo jako věštkyně. Občas je s ním vážně psina.
f = os.open (pidfile, os.O_RDWR | os.O_CREAT, 0644) try: fcntl.flock (f, fcntl.LOCK_EX | fcntl.LOCK_NB) # we're first! ... except IOError: # locked: already running pid = int (os.read (f, 5)) sys.stderr.write ('%s is running, pid %d\n' % (app, pid)) ...
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.