Timer triggers multiple times

I have a system started rule which sets, with a 3 minute delay, the startup trigger for startup actions.

rule "Delay startup rules"
	System started
	// Delay system start rules to give persistence time to restore vars and astro to get started
	createTimer(now.plusMinutes(3)) [|
		logInfo("SysStart","Triggering delayed system start")

But when I look in my log I see that the timer gets executed multiple times:

2017-08-09 11:57:23.708 [INFO ] [ipse.smarthome.model.script.SysStart] - Triggering delayed system start
2017-08-09 11:57:23.796 [INFO ] [lipse.smarthome.model.script.OnceOff] - OnceOff started
2017-08-09 11:57:23.799 [INFO ] [lipse.smarthome.model.script.OnceOff] - OnceOff ended
2017-08-09 11:57:23.932 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Processing real Morning_Event
2017-08-09 11:57:23.994 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Pond program ended
2017-08-09 11:57:23.994 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Night timer created
2017-08-09 11:57:26.903 [INFO ] [ipse.smarthome.model.script.SysStart] - Triggering delayed system start
2017-08-09 11:57:27.005 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Processing real Morning_Event
2017-08-09 11:57:27.049 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Night timer created
2017-08-09 11:57:27.081 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Pond program ended
2017-08-09 12:00:14.967 [INFO ] [ipse.smarthome.model.script.SysStart] - Triggering delayed system start
2017-08-09 12:00:15.099 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Processing real Morning_Event
2017-08-09 12:00:15.138 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Night timer created
2017-08-09 12:00:15.163 [INFO ] [g.eclipse.smarthome.model.script.TOD] - Pond program ended

and this happens all the time. Had the problem before, so I reinstalled openhab2 from scratch but still this strange behaviour.

I am at a loss why this happens and what I can do about it. Openhab2 doesnt excel in reporting errors and anomalies and am trying for almost 6 months now to convert from a perfectly working openhab1

You can save the state of your timer in a variable and check, if this is the first run of the timer.

Another approach is to define a variable (like a boolean) to save if the rule was run already (e.g define it as false, check in your rule, if it is false, run your stuff and set it to true. It won’t run again.)