mirror of https://gitee.com/openkylin/libvirt.git
run: gracefully handle SIGHUP, SIGQUIT, SIGTERM
When using thue 'run' script to launch a daemon, it is intended to temporarily stop the systemd units and re-start them again after. When using this script over an SSH connection, it will get SIGHUP if the connection goes away, and in this case it fails to re-start the systemd units. We need to catch SIGHUP and turn it into a normal python exception. For good measure we do the same for SIGQUIT and SIGTERM too. SIGINT already gets turned into an exception by default which we handle. Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
a3a40903d9
commit
a870801ae1
10
run.in
10
run.in
|
@ -43,6 +43,7 @@
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import random
|
import random
|
||||||
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
@ -155,6 +156,13 @@ else:
|
||||||
print("Temporarily stopping systemd units...")
|
print("Temporarily stopping systemd units...")
|
||||||
stopped_units = []
|
stopped_units = []
|
||||||
|
|
||||||
|
def sighandler(signum, frame):
|
||||||
|
raise OSError("Signal %d received, terminating" % signum)
|
||||||
|
|
||||||
|
signal.signal(signal.SIGHUP, sighandler)
|
||||||
|
signal.signal(signal.SIGTERM, sighandler)
|
||||||
|
signal.signal(signal.SIGQUIT, sighandler)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for unit in try_stop_units:
|
for unit in try_stop_units:
|
||||||
print(" > %s" % unit)
|
print(" > %s" % unit)
|
||||||
|
@ -167,6 +175,8 @@ else:
|
||||||
ret = subprocess.call(args, env=env)
|
ret = subprocess.call(args, env=env)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
pass
|
pass
|
||||||
|
except Exception as e:
|
||||||
|
print("%s" % e, file=sys.stderr)
|
||||||
finally:
|
finally:
|
||||||
print("Re-starting original systemd units...")
|
print("Re-starting original systemd units...")
|
||||||
stopped_units.reverse()
|
stopped_units.reverse()
|
||||||
|
|
Loading…
Reference in New Issue