[Erp5-report] r43965 luke - /erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Mar 4 11:41:17 CET 2011
Author: luke
Date: Fri Mar 4 11:41:17 2011
New Revision: 43965
URL: http://svn.erp5.org?rev=43965&view=rev
Log:
- do singal translation for cloudooo, as paster is not killing children
on SIGTERM, but on SIGINT only
Modified:
erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py
erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py
Modified: erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py?rev=43965&r1=43964&r2=43965&view=diff
==============================================================================
--- erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py [utf8] (original)
+++ erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py [utf8] Fri Mar 4 11:41:17 2011
@@ -316,9 +316,9 @@ class Recipe(BaseSlapRecipe):
conversion_server_dict))
self.path_list.append(config_file)
self.path_list.extend(zc.buildout.easy_install.scripts([(name,
- __name__ + '.execute', 'execute')], self.ws, sys.executable,
- self.wrapper_directory, arguments=[self.options['ooo_paster'].strip(),
- 'serve', config_file]))
+ __name__ + '.execute', 'execute_with_signal_translation')], self.ws,
+ sys.executable, self.wrapper_directory,
+ arguments=[self.options['ooo_paster'].strip(), 'serve', config_file]))
self.connection_dict.update(**{
name + '_port': conversion_server_dict['port'],
name + '_ip': conversion_server_dict['ip']
Modified: erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py
URL: http://svn.erp5.org/erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py?rev=43965&r1=43964&r2=43965&view=diff
==============================================================================
--- erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py [utf8] (original)
+++ erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py [utf8] Fri Mar 4 11:41:17 2011
@@ -1,5 +1,34 @@
+import sys
import os
+import signal
+import subprocess
+import time
+
def execute(args):
"""Portable execution with process replacement"""
# Note: Candidate for slapos.lib.recipe
os.execv(args[0], args)
+
+child_pg = None
+def sig_handler(signal, frame):
+ print 'Received signal %r, killing children and exiting' % signal
+ if child_pg is not None:
+ os.killpg(child_pg, signal.SIGHUP)
+ os.killpg(child_pg, signal.SIGTERM)
+ sys.exit(0)
+
+signal.signal(signal.SIGINT, sig_handler)
+signal.signal(signal.SIGQUIT, sig_handler)
+signal.signal(signal.SIGTERM, sig_handler)
+
+def execute_with_signal_translation(args):
+ """Run process as children and translate from SIGTERM to another signal"""
+ child = subprocess.Popen(args, close_fds=True, preexec_fn=os.setsid)
+ child_pg = child.pid
+ try:
+ while True:
+ print 'Running'
+ time.sleep(10)
+ finally:
+ os.killpg(child_pg, signal.SIGHUP)
+ os.killpg(child_pg, signal.SIGTERM)
More information about the Erp5-report
mailing list