@mikegerwitz And there's 'batch' for jobs which don't need to be run right now, but should be started when system load is low, and send mail with output on completion.
'batch' jobs will queue in submitted order and run when system load is below a defined value.
@mikegerwitz Also useful to note that 'at' should be read as "guaranteed not to run before specified time' rather than "guaranteed to run at specified time".
The scheduler tries to execute jobs after the timespec has passed, but issues (load limits, overloaded / laggy system) can contribute to substantial delays.