Execute a call to an API before reboot and after boot
Hi
I want to call an api with curl before reboot or shutdown -r now and after boot for maintenance propose, only when I call reboot manually and came out with this.
It works, but it's calling the api on shutdown now/halt too.
The ideia it to call this api to disable monitoring on reboot and enable it on boot.
Any suggestions?
[Unit]
Description = Maintenance mode
Before = reboot.target
After = network-online.target boot-complete.target
Requires = network-online.target
Conflicts = halt.target poweroff.target
[Service]
User = root
Group = root
Type = oneshot
RemainAfterExit = yes
ExecStart = "/usr/local/bin/maintenance-on.sh"
ExecStop = "/usr/local/bin/maintenance-off.sh"
[Install]
WantedBy = multi-user.target
Thanks
Comments
Cron job for on reboot.
Can't think of a good way to do on shutdown though. Most stuff gets killed pretty fast on shutdown command being issued. If you have a 2nd machine you could just watch till the machine goes down I guess via ping
Maybe another approach could be defining your script as alias for
shutdown
, trigger your API call there and then hand off the further processing to the "real binary"?My guess would be the ExecStop is getting called when network-online goes away. If you must use systemd, I would suggest you have one unit file with ExecStart=maintenance-on.sh before reboot.target, and a second unit file with ExecStart=maintenance-off.sh after network-online.target.
However, I would also recommend that before reboot, you make an API call that disables monitoring for 5 minutes instead of turning it off entirely. Otherwise you will end up with a situation where the instance fails to come back up properly after a reboot and your monitoring happily ignores it because the startup script never ran to turn monitoring back on.
I’d just create an alias for the shutdown script, and a cron entry for boot up script as suggested before.
Yes, a cron @reboot entry and a function/alias should be an easier solution
Thanks for you feedback