mirror of https://github.com/fail2ban/fail2ban
RF: try/except/finally in a single statement (while at it)
since we support now python >= 2.6pull/1187/head
parent
9ebf01293b
commit
85b298e49c
|
@ -560,32 +560,32 @@ class CommandAction(ActionBase):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
_cmd_lock.acquire()
|
_cmd_lock.acquire()
|
||||||
try: # Try wrapped within another try needed for python version < 2.5
|
try:
|
||||||
stdout = tempfile.TemporaryFile(suffix=".stdout", prefix="fai2ban_")
|
stdout = tempfile.TemporaryFile(suffix=".stdout", prefix="fai2ban_")
|
||||||
stderr = tempfile.TemporaryFile(suffix=".stderr", prefix="fai2ban_")
|
stderr = tempfile.TemporaryFile(suffix=".stderr", prefix="fai2ban_")
|
||||||
try:
|
|
||||||
popen = subprocess.Popen(
|
popen = subprocess.Popen(
|
||||||
realCmd, stdout=stdout, stderr=stderr, shell=True,
|
realCmd, stdout=stdout, stderr=stderr, shell=True,
|
||||||
preexec_fn=os.setsid # so that killpg does not kill our process
|
preexec_fn=os.setsid # so that killpg does not kill our process
|
||||||
)
|
)
|
||||||
stime = time.time()
|
stime = time.time()
|
||||||
|
retcode = popen.poll()
|
||||||
|
while time.time() - stime <= timeout and retcode is None:
|
||||||
|
time.sleep(0.1)
|
||||||
retcode = popen.poll()
|
retcode = popen.poll()
|
||||||
while time.time() - stime <= timeout and retcode is None:
|
if retcode is None:
|
||||||
|
logSys.error("%s -- timed out after %i seconds." %
|
||||||
|
(realCmd, timeout))
|
||||||
|
pgid = os.getpgid(popen.pid)
|
||||||
|
os.killpg(pgid, signal.SIGTERM) # Terminate the process
|
||||||
|
time.sleep(0.1)
|
||||||
|
retcode = popen.poll()
|
||||||
|
if retcode is None: # Still going...
|
||||||
|
os.killpg(pgid, signal.SIGKILL) # Kill the process
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
retcode = popen.poll()
|
retcode = popen.poll()
|
||||||
if retcode is None:
|
except OSError as e:
|
||||||
logSys.error("%s -- timed out after %i seconds." %
|
logSys.error("%s -- failed with %s" % (realCmd, e))
|
||||||
(realCmd, timeout))
|
|
||||||
pgid = os.getpgid(popen.pid)
|
|
||||||
os.killpg(pgid, signal.SIGTERM) # Terminate the process
|
|
||||||
time.sleep(0.1)
|
|
||||||
retcode = popen.poll()
|
|
||||||
if retcode is None: # Still going...
|
|
||||||
os.killpg(pgid, signal.SIGKILL) # Kill the process
|
|
||||||
time.sleep(0.1)
|
|
||||||
retcode = popen.poll()
|
|
||||||
except OSError, e:
|
|
||||||
logSys.error("%s -- failed with %s" % (realCmd, e))
|
|
||||||
finally:
|
finally:
|
||||||
_cmd_lock.release()
|
_cmd_lock.release()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue