diff --git a/src/python/rtcds/fe_generator/sequencer.py b/src/python/rtcds/fe_generator/sequencer.py index 0a80c990f2d96b2b8b8fd2b3aec4aeb1672edc1b..b306d60bd0a64646b816abb73fe742bd3c8e619f 100644 --- a/src/python/rtcds/fe_generator/sequencer.py +++ b/src/python/rtcds/fe_generator/sequencer.py @@ -42,10 +42,10 @@ class Sequencer(object): self.processes.binds_to(dolphin_drivers.first_service, dolphin_port.start) before_world.append(dolphin_port) - before_world.append(self.delay(15, "dolphin_port")) + before_world.append(self.delay(15, 5, "dolphin_port")) before_world.append(dolphin_drivers) klog("dolphin drivers added") - before_world.append(self.delay(30, "startup")) + before_world.append(self.delay(30, 10, "startup")) if self.options["HAS_EPICS_ONLY_MODELS"]: world.append(self.processes.epics_only_models(self.options["EPICS_ONLY_MODELS"])) models = True @@ -71,9 +71,9 @@ class Sequencer(object): def create_cdsrfm_start_sequence(self, front_end_processes, cdsrfm_processes): before_world = [ front_end_processes.dolphin_port(), - self.delay(15, "dolphin_port"), + self.delay(15, 5, "dolphin_port"), front_end_processes.dolphin_drivers(), - self.delay(30, "startup"),] + self.delay(30, 10, "startup"),] world = [ cdsrfm_processes.module(), cdsrfm_processes.epics(), @@ -103,15 +103,19 @@ class Sequencer(object): self.end = unit_name self.first_service = unit_name - def delay(self, time_s, name): + def delay(self, start_time_s, stop_time_s, name): file_name = f"rts-delay-{name}.service" file_path = path.join(self.target_dir, file_name) with open(file_path, "wt") as f: f.write(f"""[Unit] -Description=Delay for {time_s} seconds +Description=Delay for {start_time_s} seconds [Service] -ExecStartPre=/bin/sleep {time_s} -ExecStart=/bin/echo 'finished waiting for {name}' +Type=oneshot +RemainAfterExit=yes +ExecStartPre=/bin/sleep {start_time_s} +ExecStart=/bin/echo '[startup] finished waiting for {name}' +ExecStop=/bin/sleep {stop_time_s} +ExecStopPost=/bin/echo '[shutdown] finished waiting for {name}' """) return self.Delay(file_name)