@node Overview @chapter Overview @command{sat} is a simple alternative to @command{at}. It implements the basic features of at @command{at} in a sane less harmful way. It is hence by itself incompatible with @command{at}. @command{sat} is used to queue jobs for later execution. It is daemon-based, the deamon being @command{satd}, and using @command{satq}, @command{satrm}, and @command{satr} you can list queued jobs, remove queued jobs, and run queued jobs early, respectively. @command{satd} is launched automatically and exits automatically when it has nothing more to do. If you are using @command{autohaltd}, you should set up hooks for @command{sat} that pauses @command{autohaltd} using @code{SIGSTOP} (and resume with @code{SIGCONT}) when there are queued jobs. This would prevent @command{autohaltd} from shutting down the machine while there are queued jobs but no logins. @command{sat} cannot stop @command{autohaltd} by adding login entries, because @command{autohaltd} will only recognise them if they are in fact true logins. @command{sat} stores the job queue in a file. However, this file does not persist between reboot. @command{sat} was written because @command{at} is far too complex and has a lot of issues. @command{at} sanitises the environment, @command{sat} does not do this because you can do this with @command{env}, and you will not lose environment variable that you my want to keep, which sometimes happens with @command{at}. @command{at} also do mailing, @command{sat} instead lets you implement this with hooks, so that it is less complex and less restrictive. @command{at} does system load analysis, which @command{sat} does not, instead you can use an external program for this. @command{sat} also only has one queue, because you do not need more than one queue, queues can easily be emulated. Finally, the authors of @command{at} had the brave idea to do natural language parsing, @footnote{Good luck getting that to work properly for even just English and the Gregorian calendar!} @command{sat} does however do trivial parsing, but is designed so that you can use any external parser. Some think that @command{at} shall be merge into @command{cron}. The authors of @command{sat} does not think so because it is two wilding different kind of job scheduling. @command{sat} uses two clocks: @code{CLOCK_REALTIME} for time specified in absolute time, and @code{CLOCK_BOOTTIME} for time specified in relative time. Note that this is not @code{CLOCK_REALTIME_ALARM} and @code{CLOCK_BOOTTIME_ALARM}, if you need those clocks, you can use the less powerful @command{sleep-until} which supports all clocks your operating system supports. @command{sat} is written to waste as little memory as possible. I hate excessively programs that do not do anything, if we are going to add more and more daemons, all wasting more and more memory will we never be about to get rid of swap and use strict commit accounting on machines with very little memory.