Power Management & Scheduling via Command Line
By: Richard Glaser - Revised: 2010-04-13 ScottDownload iTunes U
Audio,
Video or
PDF
Introduction
In Mac OS X, you can view & modify settings for power management using the GUI, System Preferences -> Energy Saver. But this isn't always ideal especially in a enterprise environment, because some settings aren't available via the GUI and other times you might want to programmatically modify or set these settings, like using a script, or remotely using Apple Remote Desktop or SSH.
Luckily, there is a command line tool called pmset that allows you to modify and read the power management settings. These settings includes options like idle sleep timing, wake on administrative access, automatic restart on power loss, scheduling events, and much more.
View Settings
Using the following "pmset" command with the "-g" & "disk" flags will display settings for all power sources on disk, including those not currently in use.
For example, this is the output on a Power Mac Dual 2 GHz...
# pmset -g disk
AC Power:
womp 1
powerbutton 0
sleep 0
acwake 0
autorestart 1
ring 0
reduce 0
disksleep 0
displaysleep 180
dps 0
- womp - wake on ethernet magic packet.
- powerbutton - sleep the Mac when power button is pressed.
- sleep - Mac sleep time, set in minutes.
- acwake - wake Mac when AC or battery has changed.
- autorestart - automatically restart after power loss.
- ring - wake on modem access.
- reduce - reduce Mac processor speed.
- disksleep - disk spindown timer.
- displaysleep - display sleep timer, set to 180 or 3 hours.
- dps - dynamically change processor speed based on load.
Below is an example on how some pmset settings correlates to the System Preferences -> Energy Saver pane.
For example, this is the output on a MacBook Pro 2.33 Intel Core 2 Duo...
# pmset -g disk
Battery Power:
sms 1
hibernatefile /var/vm/sleepimage
acwake 0
sleep 15
halfdim 1
hibernatemode 3
disksleep 10
displaysleep 5
lidwake 1
lessbright 0
AC Power:
womp 1
sms 1
hibernatefile /var/vm/sleepimage
acwake 0
sleep 0
autorestart 0
halfdim 1
hibernatemode 3
disksleep 10
displaysleep 60
lidwake 1
- sms - Use Sudden Motion Sensor to park disk heads on sudden changes in G-force.
Set to true (1) - halfdim - Display sleep will use an intermediate half-brightness state between full brightness and fully off. Set to true (1)
- hibernatemode - When Mac goes into sleeping mode and gets the following behaviors depending on the following values. Set to hibernate mode 3.
- 0 - Old style sleep mode, with RAM powered on while sleeping, safe sleep disabled, and super-fast wake.
- 1 - Hibernation mode, with RAM contents written to disk, system totally shut down while “sleeping,” and slower wake up, due to reading the contents of RAM off the hard drive.
- 3 - The default mode on machines introduced since about fall 2005. RAM is powered on while sleeping, but RAM contents are also written to disk before sleeping. In the event of total power loss, the system enters hibernation mode automatically.
- 5 - This is the same as mode 1, but it’s for those using secure virtual memory.
- 7 - This is the same as mode 3, but it’s for those using secure virtual memory.
- lidwake - Wake the Mac when the laptop lid is opened. Set to true (1)
- lessbright - Turn down display brightness when switching to this power source.
Below is an example on how some pmset settings correlates to the System Preferences -> Energy Saver pane.
For example, this is the output on a Xserve Pro 2 GHz Dual-Core Intel Xeon with attached APC UPS, using the "ups" flag with the "pmset" command...
# pmset -g ups
UPS settings:
haltlevel off 0
haltafter off 0
haltremain on 5
- haltlevel - When draining UPS battery, battery level at which to trigger an emergency shutdown (value in %)
- haltafter - When draining UPS battery, trigger emergency shutdown after this long running on UPS power (value in minutes)
- haltremain - When draining UPS battery, trigger emergency shutdown when this much time remaining on UPS power is estimated (value in minutes)
UPS settings also have an on/off value. Use a -1 argument instead of percent or minutes to turn any of these settings off. If multiple halt conditions are specified, the system will halt on the first condition that occurs in a low power situation.
Below is an example on how some pmset settings correlates to the System Preferences -> Energy Saver pane.
View Schedule
To display the scheduled startup/wake and shutdown/sleep events use the following command...
# pmset -g sched
For example, here is the repeating event schedule that startups at 7:00 AM and shutdowns at 12:00 AM each day.
# pmset -g sched
Repeating power events:
wakepoweron at 7:00AM every day
shutdown at 0:00AM every day
Scheduled power events:
[0] wakeorpoweron at 05/24/07 07:00:00 by Repeating
[1] wakeorpoweron at 05/24/07 07:00:00 by Repeating
[2] shutdown at 05/24/07 00:00:00 by Repeating
For example, here is the repeating event schedule that shutdowns at 12:00 AM on the weekends, Saturday & Sunday.
# pmset -g sched
Repeating power events:
shutdown at 0:00AM weekends only
Scheduled power events:
[0] shutdown at 05/26/07 00:00:00 by Repeating
Setting Repeating Events
You can use the following syntax to set a repeating even...
pmset repeat type weekdays time
- type - one of sleep, wake, poweron, shutdown, wakeorpoweron
- weekdays - a subset of MTWRFSU
- time - hh:mm:ss
For example, to set startup at 7:00 AM on Monday, Wednesday and Friday.
pmset repeat wakeorpoweron MWF 7:00:00
Or if you want to set startup on weekdays...
pmset repeat wakeorpoweron MTWRF 7:00:00
Or weekends...
pmset repeat wakeorpoweron SU 7:00:00
Or everyday...
pmset repeat wakeorpoweron MTWRFSU 7:00:00
Setting an Event for a Specific Date & Time
In addition to setting event repeat on a day or days at a specific time, you can also specify that an even run on a specific date at a specific time.
The basic syntax is as follows...
pmset schedule type date+time
- type - one of sleep, wake, poweron, shutdown, wakeorpoweron
- time - "mm/dd/yy hh:mm:ss" (in 24 hour format; must be in quotes)
For example, you want to play a joke on April Fools Day and want to shutdown all your computers during the work time. So, I could use the following command...
# pmset schedule shutdown "04/01/2008 11:00:00"
And to check that it is scheduled...
# pmset -g sched
Scheduled power events:
[0] shutdown at 04/01/08 11:00:00
Then you also thought it would be a good idea to have the Mac's take a day off for Labor Day...
# pmset schedule sleep "09/01/2008 00:00:00"
# pmset schedule wake "09/02/2008 00:00:00"
So, now we have the following scheduled events...
# pmset -g sched
Scheduled power events:
[0] wake at 09/02/08 00:00:00
[1] sleep at 09/01/08 00:00:00
[2] shutdown at 04/01/08 11:00:00
Reset Energy Saver Settings to Default
Restores the system's energy settings to the default values...
# pmset -c 2 -b 1 -u 1
-c = Charger (wall power)
-b = Battery
-u = UPS
Removing a Repeating Schedule
To remove a repeating schedule, use the following command...
pmset repeat cancel
Removing an Event for a Specific Date & Time
In my example, I set the Mac's to shutdown for April Fools Day, but I re-thought it, and maybe my boss doesn't have the same sense of humor that I do and won't find the joke very funny.
So, I decided it might be better to remove this event.
So, I use the following command...
# pmset schedule cancel shutdown "04/01/2008 11:00:00"
And double-check the schedule to make sure I don't have to look for employment on April 2nd...
# pmset -g sched
Scheduled power events:
[0] wake at 09/02/08 00:00:00
[1] sleep at 09/01/08 00:00:00
Next, I decided that computers really are inanimate objects and don't need to rest for Labor Day, and could be put to work on some type of job. So, lets remove that event too.
# pmset schedule cancel sleep "09/01/08 00:00:00"
# pmset schedule cancel wake "09/02/08 00:00:00"
So, now I don't have any scheduled events...
# pmset -g sched
No scheduled events.
Setting Multiple "Power On" & Power Off" Events
Currently, it appears that pmset will NOT allow you to set more than one pair of "power on" & "power off" events when using a repeating schedule.
For example...
# pmset repeat shutdown MTWRFSU 02:00:00 wakeorpoweron MTWRFSU 06:45:00
The above command would set a repeating schedule that would shutdown the Mac nightly at 2 AM in the morning and startup daily at 6:45 AM.
But, if you want to set multiple "power on" & "power off" events, you could specify a specific date/time and with a little scripting you could setup a schedule for a month.
# pmset schedule wakeorpoweron "06/07/2007 07:00:00"
# pmset schedule shutdown "06/07/2007 22:00:00"
# pmset schedule wakeorpoweron "06/07/2007 00:00:00"
# pmset schedule shutdown "06/07/2007 01:00:00"
Scenerio
Ok, in our environment, we set the Mac's to startup at a certain time to make sure they run maintenance & are powered on for the students, staff or faculty that can't find the power button.
For example, we currently startup the Mac's at 6:30 AM everyday...
# pmset -g sched
Repeating power events:
wakepoweron at 6:30AM every day
Scheduled power events:
[0] wakeorpoweron at 05/25/07 06:30:00 by Repeating
[1] wakeorpoweron at 05/26/07 06:30:00 by Repeating
We support Mac's across our campus, but a majority are located in our main Library, which has been going through major reconstruction and we have power outages that we need to make sure that the Mac's are properly shutdown and powered on for the users.
So, you can temporarily remove the repeating schedule using the following command via Apple Remote Desktop...
Then schedule specific dates/times based on the dates/times of the power outage.
For example, say, our Library was going to have a power outage or the power will sporadically come & go from noon for two days and it would be back on at noon. So, we could create a shutdown event that power off the Macs before the power issues occurs and then startup the Mac's after the power issues are to end.
For example...
Then since the Mac should be power on, it will run maintenance, which in turn would re-establish the the power management repeating schedule with tools like radmind. Or if you aren't managing your file system routinely you could simply send another Apple Remote Deskop UNIX command to re-establish your repeating schedule.