I have a long running script at the remote computer.
I don't want terminate my ssh session, and need enter it into a shell script.
How is it possible to prevent my Mac from falling into sleep from the command line?
Ask Different is a question and answer site for power users of Apple hardware and software. It only takes a minute to sign up.Sign up to join this community
In Mountain Lion you can use the
caffeinate -u -t 1000
will prevent idle sleep for 1000 seconds.
The solution to this problem is not keeping the client (your Mac) awake. Using approaches like this are undependable. What happens if the network connection is lost? Even if your Mac is awake, the script will halt.
If your long-running script is called
eternity.sh, try the following:
nohup /path/to/eternity.sh > /path/to/output.out &
Now you can even close the connection and your script will keep running. The
& backgrounds the process so you can keep the connection open and enter commands. View any output from your script via:
tail -f /path/to/output.out
The paths in the examples are optional if the script is on your path and you want script output to be written to
output.out in the current directory.
I manage scripts that run for days at a time. Scripts like these should be detached from the terminal. Thankfully,
nohup provides an easy-to-remember command invocation to achieve this--think no hangup.
Another option is pmset. Use the command
pmset noidle to prevent sleep as long as
pmset is running. Unfortunately, it requires a separate Terminal window with
pmset running in it. However, the other option,
caffeinate, only lets you set a certain time. So it's a matter of choosing whether you want to open a second SSH session, or deal with a time restraint.
Edit: According to binarybob's comment, you can actually run it in the background like this:
pmset noidle & To get back to
caffeinate -i -s /bin/ssh ...
-i - Prevent idle sleep.
-s - Prevent system sleep (entirely, even if you close the lid). Note: it only works while on AC power.
/bin/ssh - Just keep writing the command you want to execute. Using
ssh directly instead of
/bin/ssh should also work.
Results: Your system will not sleep as long as the
ssh command is running.
If you are looking for the nuclear option like I was:
sudo systemsetup -setcomputersleep Never
The StarMessage screensaver ( http://starmessagesoftware.com/moonscreensaver/ ) has also the option to keep the MAC awake for 2 hours, 8 hours, or permanenty. This way of disabling the MAC sleep, is much easier than caffeine.