diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py
index 708e63a..703fb2e 100644
--- a/src/osmo_gsm_tester/obj/enb_srs.py
+++ b/src/osmo_gsm_tester/obj/enb_srs.py
@@ -29,6 +29,12 @@
 from ..core import schema
 
 def on_register_schemas():
+    resource_schema = {
+        'prerun_scripts[]': schema.STR,
+        'postrun_scripts[]': schema.STR,
+        }
+    schema.register_resource_schema('enb', resource_schema)
+
     config_schema = {
         'enable_pcap': schema.BOOL_STR,
         'enable_tracing': schema.BOOL_STR,
@@ -100,6 +106,10 @@
         # Make sure we give the UE time to tear down
         self.sleep_after_stop()
 
+        # Execute the post run tasks.
+        if not self.postrun_tasks():
+            self.log('Could not execute the post run tasks')
+
         # copy back files (may not exist, for instance if there was an early error of process):
         self.scp_back_metrics(raiseException=False)
 
@@ -151,11 +161,73 @@
         else:
             self.dbg('Metrics have already been copied back')
 
+    def run_task(self, task):
+        # Get the arguments.
+        args_index = task.find('args=')
+
+        args = ()
+        # No arguments, all the string is the script.
+        if args_index == -1:
+            index = task.rfind('/')
+            task_name = task [index + 1:]
+            run_dir = util.Dir(self.run_dir.new_dir(task_name))
+            args = (task,)
+            self.log(f'task name is: {task_name}')
+            self.log(f'Running the script: {task} in the run dir: {run_dir}')
+        else:
+            ntask = task[:args_index - 1]
+            index = ntask.rfind('/')
+            task_name = ntask [index + 1:]
+            run_dir = util.Dir(self.run_dir.new_dir(task_name))
+            args = (ntask,)
+            args += tuple(task[args_index + 5:].split(','))
+            self.log(f'task name is: {task_name}')
+            self.log(f'Running the script: {task} in the run dir: {run_dir} with args: {args}')
+
+        proc = process.Process(task_name, run_dir, args)
+        # Set the timeout to a high value 20 minutes.
+        proc.set_default_wait_timeout(1200)
+        returncode = proc.launch_sync()
+        if returncode != 0:
+            raise log.Error('Error executing the pre run scripts. Aborting')
+            return False
+
+        return True
+
+    # Runs all the tasks that are intended to run before the execution of the eNodeb.
+    def prerun_tasks(self):
+        prerun_tasklist = self._conf.get('prerun_scripts', None)
+        if not prerun_tasklist:
+            return True
+
+        for task in prerun_tasklist:
+            if not self.run_task(task):
+                return False
+
+        return True
+
+    # Runs all the tasks that are intended to run after the execution of the eNodeb.
+    def postrun_tasks(self):
+        postrun_tasklist = self._conf.get('postrun_scripts', None)
+        if not postrun_tasklist:
+            return True
+
+        for task in postrun_tasklist:
+            if not self.run_task(task):
+                return False
+
+        return True
+
     def start(self, epc):
         self.log('Starting srsENB')
         self._epc = epc
         self.run_dir = util.Dir(self.testenv.test().get_run_dir().new_dir(self.name()))
         self.configure()
+
+        if not self.prerun_tasks():
+            self.log('Pre run tasks failed. Aborting')
+            return
+
         if self._run_node.is_local():
             self.start_locally()
         else:
