Off the top of my head, might be a bit overkill if you're not already in Kubernetes, but if you are, why not run them as Kubernetes CronJobs? You can track the run status, pause and resume the job, and in terms of history, you could simply use your observability stack to access historical logs and metrics.