Run a cron at sunrise/sunset or with some offset.
https://github.com/risacher/sunwait
Examples:
$ sunwait -p 33.640411N 84.419853W Using location: 33.640411N, 84.419853W Date: 20 Sep 2019 Local time: 18:31 Day length: 12:13 hours With civil twilight 13:00 hours With nautical twilight 13:59 hours With astronomical twilight 14:57 hours Length of twilight: civil 0:23 hours nautical 0:52 hours astronomical 1:22 hours Current specified time zone: EDT (-4 from UTC) Sun transits meridian 1330 EDT Sun rises 0725 EDT, sets 1936 EDT Civil twilight starts 0700 EDT, ends 2001 EDT Nautical twilight starts 0631 EDT, ends 2030 EDT Astronomical twilight starts 0601 EDT, ends 2059 EDT
$ sunwait -v sun down +1:19:00 33.640411N 84.419853W; /bin/date
RPM is on rpmfind.net