Running the Mac OS X maintenance scripts

Mac® OS X is a UNIX®-based system, built specifically on FreeBSD®. UNIX systems run scheduled maintenance routines — known as maintenance scripts — to clean up a variety of System logs and temporary files. By default, these are executed between 03:15 and 05:30 hours local time, depending on the script.

If your Mac is shut down or in sleep mode during these hours, the maintenance scripts will not run. [1] This results in log files that will grow over time, consuming free space on your Mac OS X startup disk.

If your Mac is shut down or left in sleep mode overnight, you need to invoke these maintenance routines manually on a regular basis. That is, unless you plan on devoting a large portion of your hard drive to the files cleaned-up by these routines!

This FAQ, derived from our book Troubleshooting Mac OS X, provides:

Additional information about maintaining Mac OS X can be found in our "Maintaining Mac OS X" FAQ.

Manually running the maintenance scripts

The easy way

We recommend you download and install one of the following utilities, depending on the version of Mac OS X you are using, and run them regularly to execute the Mac OS X maintenance scripts:

  • Shareware utilities such as Cocktail, Tiger Cache Cleaner, and Yasu. Some are available in specific versions for Mac OS X 10.4 Tiger™, Mac OS X 10.3 Panther®, and Mac OS X 10.2 Jaguar. Employ the version of the utility corresponding to the version of Mac OS X you are using.
  • Each offers a variety of other functions which are useful in troubleshooting, making their modest shareware fees "money well spent."
  • The freeware utility MacJanitor. Under Tiger, be sure to use version 1.3 or later.

You may find additional solutions by searching MacUpdate or VersionTracker™.

With these utilities you can run any individual maintenance script — daily, weekly, or monthly — or run them all. For example, running all three scripts weekly is a good habit if your Mac is frequently shutdown or in sleep mode overnight.

While we have not tested it, we have read positive reports from users of the freeware application Anacron, which runs the maintenance scripts automatically if the computer is awake and the scripts have not run when scheduled. Separate versions of Anacron are available for Tiger, Panther, and Jaguar.

The Terminal way

Using your Admin account, you can execute all three maintenance scripts at once, as follows:

  1. Launch Terminal, in the Macintosh HD > Applications > Utilities folder.
  2. At the Terminal prompt, type the following, exactly as written:
    1. sudo periodic daily weekly monthly
  3. Press Return.
  4. Type your Admin password when prompted, then press Return.

All three scripts will run in sequence. There is no visual feedback while the scripts execute. You will know they are completed when the Terminal prompt returns.

You can also run the scripts individually. For example, to run just the daily script, you would type the command:

  • sudo periodic daily

in step 2 above.

Determining when the maintenance scripts last ran

You can execute a Terminal command to quickly check the date and time stamps of the log files associated with each maintenance script. This indicates when the scripts' own logs were last updated, and hence when the scripts were last executed.

  1. Launch Terminal, in the Macintosh HD > Applications > Utilities folder.
  2. At the Terminal prompt, type the following, exactly as written:
    1. ls -al /var/log/*.out
  3. Press Return.

You will see output similar to the following:

-rw-r--r-- 1 root wheel 467984 8 May 10:40 /var/log/daily.out

-rw-r--r-- 1 root wheel 1258 8 May 10:43 /var/log/monthly.out

-rw-r--r-- 1 root wheel 198378 8 May 10:43 /var/log/weekly.out

In this example, the scripts last ran on 8 May of the current year, between 10:40 and 10:43 local time. The date and time stamps in the example are the result of running the scripts manually using Terminal. If the scripts were run automatically on their default schedule, their date stamps would vary and their time stamps would indicate executions between 03:15 and 05:30 hours.

The maintenance performed by the scripts

Each maintenance script — daily, weekly, and monthly — has a specific function.

  • The daily script removes old log files, "scratch" and "junk" files, backs-up the NetInfo database, reports a variety of system and network statistics, and rotates the system.log file. Under Tiger, the daily script also cleans up scratch fax files and prunes asl.log, the log for the new Apple System Logging facility.
  • The output from the daily script is written to the /var/log/daily.out file, which can be viewed in Console.
  • By default, the daily script is scheduled to run daily at 03:15 hours local time.
  • The weekly script rebuilds the locate and whatis databases and rotates — depending on the version of Mac OS X you are using — the following log files: ftp.log, lookupd.log, lpr.log, mail.log, netinfo.log, ipfw.log, ppp.log, and secure.log
  • The output from the weekly script is written to the /var/log/weekly.out file, which can be viewed in Console.
  • By default, the weekly script is scheduled to run every Saturday at the following times:
    • Under Tiger: 03:15 hours local time.
    • Under Panther and Jaguar: 04:30 hours local time.
  • The monthly script reports per-user usage accounting and rotates — depending on the version of Mac OS X you are using — the wtmp, install.log, and cu.modem.log files.
  • The output from the monthly script is written to the /var/log/monthly.out file, which can be viewed in Console.
  • By default, the monthly script is scheduled to run on the first of the month at 05:30 hours local time.

How the scripts are launched on a schedule

How the schedule for each script is specified depends on the version of Mac OS X you are using.

Scheduling under Panther and Jaguar

Under Panther and Jaguar, the schedule is specified in the System crontab file. You can easily view or edit this file with the donationware utility Cronnix. The cron process launches the scripts based on the schedule specified in crontab.

Scheduling under Tiger

Under Tiger, the new launchd process invokes each script on a schedule specified in a script-specific property list (.plist file) in the /System/Library/LaunchDaemons directory. The specific property list for each script is as follows:

  • daily script: com.apple.periodic-daily.plist
  • weekly script: com.apple.periodic-weekly.plist
  • monthly script: com.apple.periodic-monthly.plist

Additional information about launchd can be found in the Apple Developer Connection document System Startup Programming Topics.

How the timer used by launchd handles sleep time has led many to believe that they no longer need to run the maintenance scripts, and that the scripts are run automatically if the Mac was asleep or shutdown at the scheduled time, ala third-party utilities such as Anacron. However, this is untrue.

While it may appear that launchd executes the maintenance scripts "on the fly" if the computer is asleep or shutdown at the appointed time, this is a side effect of how the timer treats time the computer has spent in sleep mode. The timer used by launchd does not count sleep time. If your Mac is asleep at the scheduled time at which a given script is supposed to run, the script may run later that day, at a time shifted by the amount of time the Mac was asleep. However, if you restart your Mac before the time-shifted execution time, pending events are lost and the script will not run off-schedule: the next chance for the script to run will be at its regularly scheduled time.

If you regularly restart your Mac and the computer regularly sleeps or is shutdown at the scheduled times, it's possible that the scripts will never run, hence one should still run them manually, say on a weekly basis.

The sleep time shift is also cumulative. For example, if you don't restart your Mac for weeks or months at a time, but let it sleep when not in use, this can result in:

  • The daily script running once every few days or never.
  • The weekly script once every few weeks or never.
  • The monthly script once every few months or never.

The time shift in each case is the total amount of time the Mac has spent in sleep since its last restart. If you have a process that writes heavily to the logs, you can wind up devoting good hard disk space to the log files.

Related links

Notes

[1] If you log out from your Mac OS X system and leave it with the Login Window displayed, your Mac can still enter sleep mode. When left at the Login Window, your Mac will enter sleep mode based on the settings specified by the last Admin user in System Preferences > Energy Saver. Therefore, if you want to leave your Mac with the Login Window displayed and still have the nightly Mac OS X maintenance routines run automatically, an Admin user must set System Sleep to Never in the System Preferences > Energy Saver > Sleep tab.

Did you find this FAQ helpful? You will find a wealth of additional advice for preventing or resolving Mac OS X problems in Dr. Smoke's book, Troubleshooting Mac® OS X.
Use of this site signifies your agreement to the terms of use.
Copyright © 2003-2008 The X Lab. All rights reserved.