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
. Each 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" |
"http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
<plist version="1.0"> |
<dict> |
<key>Label</key> |
<string>com.example.happybirthday</string> |
<key>ProgramArguments</key> |
<array> |
<string>happybirthday</string> |
</array> |
<key>StartCalendarInterval</key> |
<dict> |
<key>Day</key> |
<integer>11</integer> |
<key>Hour</key> |
<integer>0</integer> |
<key>Minute</key> |
<integer>0</integer> |
<key>Month</key> |
<integer>7</integer> |
<key>Weekday</key> |
<integer>0</integer> |
</dict> |
</dict> |
</plist> |
For more information on these values, see the manual page for launchd.plist
.
Timed Jobs Using cron
Systemwide cron
jobs can be installed by modifying /etc/crontab
. Per-user 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.
Because installing cron
jobs requires modifying a shared resource (the crontab
file), you should not programmatically add a cron
job.
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.
All other 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.
Copyright © 2003, 2016 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2016-09-13