Skip to content

Commit a11813d

Browse files
committed
supervisor does not have pre-stop like upstart, so we need to call /usr/sbin/@(name)-stop explictly when the @(name)-start script receives TERM signal
1 parent c2a89d6 commit a11813d

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

src/robot_upstart/install_script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def main():
9292
name=job_name, interface=args.interface, user=args.user,
9393
workspace_setup=args.setup, rosdistro=args.rosdistro,
9494
master_uri=args.master, log_path=args.logdir,
95+
sigterm_stop=(args.provider=='supervisor'),
9596
systemd_after=args.systemd_after,
9697
supervisor_priority=args.supervisor_priority)
9798

src/robot_upstart/job.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class Job(object):
4040
""" Represents a ROS configuration to launch on machine startup. """
4141

4242
def __init__(self, name="ros", interface=None, user=None, workspace_setup=None,
43-
rosdistro=None, master_uri=None, log_path=None,
43+
rosdistro=None, master_uri=None, log_path=None, sigterm_stop=None,
4444
systemd_after=None, supervisor_priority=None):
4545
"""Construct a new Job definition.
4646
@@ -109,6 +109,9 @@ def __init__(self, name="ros", interface=None, user=None, workspace_setup=None,
109109
# of the generated Supservisor conf file
110110
self.supervisor_priority = supervisor_priority or 200
111111

112+
# call @(name)-stop script when received TERM signal
113+
self.sigterm_stop = sigterm_stop
114+
112115
# Set of files to be installed for the job. This is only launchers
113116
# and other user-specified configs--- nothing related to the system
114117
# startup job itself. List of strs.

templates/job-start.em

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ fi
107107
setpriv --reuid @(user) --regid @(user) --init-groups roslaunch $LAUNCH_FILENAME @(roslaunch_wait?'--wait ')&
108108
PID=$!
109109

110+
@[if sigterm_stop]@
111+
_term() {
112+
/usr/sbin/@(name)-stop
113+
}
114+
trap _term SIGTERM
115+
@[end if]
116+
110117
log info "@(name): Started roslaunch as background process, PID $PID, ROS_LOG_DIR=$ROS_LOG_DIR"
111118
echo "$PID" > $log_path/@(name).pid
112119

0 commit comments

Comments
 (0)