Scheduling Timed Jobs
In OS X, you can run a background job on a timed schedule in two ways:
launchd jobs and
cron jobs. (Older approaches, such as
at jobs and
periodic jobs are deprecated and should not be used.) This section explains these methods briefly and provides links to manual pages that provide additional details.
Timed Jobs Using launchd
The preferred way to add a timed job is to use
launchd job is described by a separate file. This means that you can manage
launchd timed jobs by simply adding or removing a file.
To create a
launchd timed job, you should create a configuration property list file similar to those described in Creating a launchd Property List File except that you specify a
StartCalendarInterval key containing a dictionary of time values.
For example, the following property list runs the program
happybirthday at midnight every time July 11 falls on a Sunday.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
For more information on these values, see the manual page for
Timed Jobs Using cron
cron jobs can be installed by modifying
cron jobs can be installed using the
crontab tool. The format of these
crontab files is described in the man page for the
crontab file format.
cron jobs requires modifying a shared resource (the
crontab file), you should not programmatically add a
Effects of Sleeping and Powering Off
If the system is turned off or asleep,
cron jobs do not execute; they will not run until the next designated time occurs.
If you schedule a
launchd job by setting the
StartCalendarInterval key and the computer is asleep when the job should have run, your job will run when the computer wakes up. However, if the machine is off when the job should have run, the job does not execute until the next designated time occurs.
launchd jobs are skipped when the computer is turned off or asleep; they will not run until the next designated time occurs.
Consequently, if the computer is always off at the job’s scheduled time, both
cron jobs and
launchd jobs never run. For example, if you always turn your computer off at night, a job scheduled to run at 1 A.M. will never be run.