{ config, lib, pkgs, ... }: # Daily scheduled Laravel artisan jobs # Runs artisan finish:reports at 01:00 for production and staging APIs let php = pkgs.php82; sites = [ { domain = "api.ebs.amz.at"; user = "api_ebs_amz_at"; } { domain = "api.stage.ebs.amz.at"; user = "api_stage_ebs_amz_at"; } ]; mkArtisanService = site: { name = "artisan-finish-reports-${site.domain}"; value = { description = "Laravel artisan finish:reports for ${site.domain}"; after = [ "network.target" "mysql.service" "phpfpm-${site.domain}.service" ]; serviceConfig = { Type = "oneshot"; User = site.user; Group = "nginx"; WorkingDirectory = "/var/www/${site.domain}"; ExecStart = "${php}/bin/php artisan finish:reports"; }; }; }; mkArtisanTimer = site: { name = "artisan-finish-reports-${site.domain}"; value = { description = "Daily timer for artisan finish:reports on ${site.domain}"; wantedBy = [ "timers.target" ]; timerConfig = { OnCalendar = "*-*-* 01:00:00"; Persistent = true; }; }; }; in { systemd.services = builtins.listToAttrs (map mkArtisanService sites); systemd.timers = builtins.listToAttrs (map mkArtisanTimer sites); }