[RigoDaemon] automatically shutdown on executable change
This commit is contained in:
+14
-4
@@ -58,7 +58,7 @@ from entropy.exceptions import DependenciesNotFound, \
|
||||
DependenciesCollision, DependenciesNotRemovable, SystemDatabaseError
|
||||
from entropy.i18n import _
|
||||
from entropy.misc import LogFile, ParallelTask, TimeScheduled, \
|
||||
ReadersWritersSemaphore
|
||||
ReadersWritersSemaphore, DirectoryMonitor
|
||||
from entropy.fetchers import UrlFetcher
|
||||
from entropy.output import TextInterface, purple
|
||||
from entropy.client.interfaces import Client
|
||||
@@ -449,15 +449,24 @@ class RigoDaemonService(dbus.service.Object):
|
||||
Entropy.set_daemon(self)
|
||||
self._entropy = Entropy()
|
||||
self._fakeout = FakeOutFile(self._entropy)
|
||||
exec_path = sys.argv[0]
|
||||
write_output(
|
||||
"__init__: dbus service loaded, pid: %d, ppid: %d" % (
|
||||
os.getpid(), os.getppid(),)
|
||||
)
|
||||
"__init__: dbus service loaded, "
|
||||
"pid: %d, ppid: %d, exec: %s" % (
|
||||
os.getpid(), os.getppid(), exec_path,)
|
||||
)
|
||||
|
||||
self._deferred_shutdown = False
|
||||
self._deferred_shutdown_mutex = Lock()
|
||||
signal.signal(signal.SIGUSR2, self._activate_deferred_shutdown)
|
||||
|
||||
flags = DirectoryMonitor.DN_MODIFY | DirectoryMonitor.DN_DELETE | \
|
||||
DirectoryMonitor.DN_RENAME | DirectoryMonitor.DN_CREATE
|
||||
self._mon = DirectoryMonitor(
|
||||
os.path.dirname(exec_path),
|
||||
self._activate_deferred_shutdown,
|
||||
event_flags=flags)
|
||||
|
||||
def _activate_deferred_shutdown(self, *args):
|
||||
"""
|
||||
Activate deferred shutdown starting the ping/pong
|
||||
@@ -569,6 +578,7 @@ class RigoDaemonService(dbus.service.Object):
|
||||
"""
|
||||
write_output("stop(): called", debug=True)
|
||||
with self._activity_mutex:
|
||||
GLib.idle_add(self._mon.close)
|
||||
self._stop_signal = True
|
||||
self._action_queue_waiter.release()
|
||||
self._close_local_resources()
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.insert(0, "./")
|
||||
sys.path.insert(1, "/usr/lib/rigo")
|
||||
|
||||
import dbus
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
from RigoDaemon.config import DbusConfig
|
||||
|
||||
if __name__ == "__main__":
|
||||
mainloop = DBusGMainLoop(set_as_default=True)
|
||||
bus = dbus.SystemBus(mainloop=mainloop)
|
||||
entropy_bus = bus.get_object(
|
||||
DbusConfig.BUS_NAME,
|
||||
DbusConfig.OBJECT_PATH)
|
||||
dbus.Interface(
|
||||
entropy_bus,
|
||||
dbus_interface=DbusConfig.BUS_NAME).reload()
|
||||
raise SystemExit(0)
|
||||
Reference in New Issue
Block a user