Aquí hay una bash script que cuando se ejecuta, sin un argumento, programa el sistema para que se despierte en 20 minutos y luego lo pone a dormir inmediatamente. O puede proporcionar, como argumento, el número de minutos que desea que duerma antes de despertar el sistema. Por desgracia, la utilidad de línea de comandos de OS X pmset
, que se encarga de la programación de la vigilia y el sueño, requiere privilegios elevados. Esto significa que el comando debe ser ejecutado usando sudo
como se muestra en el siguiente ejemplo.
En el ejemplo siguiente, el script se guardó como sleepwake
y luego en el Terminal se hace ejecutable usando chmod u+x sleepwake
y luego ejecuta como sleepwake
para mostrar el mensaje de ayuda interna. (Nota: El directorio de trabajo actual en el que me encuentro está en mi $PATH
. Para más información, véase la nota sobre los ejemplos, más abajo).
$ sleepwake
This script must be run as root using sudo.
Syntax: sudo sleepwake [n]
Example: sudo sleepwake 10
Wakes the system 10 minutes after going to sleep.
Example: sudo sleepwake
Wakes the system, using the default, 20 minutes after going to sleep.
$
Creación de sleepwake
:
En un Terminal, escriba lo siguiente, presionando Enter después de cada comando:
touch sleepwake
open sleepwake
Copiar y pegar el código abajo en el documento abierto y en blanco.
Código:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
printf "\n This script must be run as root using sudo.\n\n"
printf " Syntax: sudo sleepwake [n]\n Example: sudo sleepwake 10\n"
printf " Wakes the system 10 minutes after going to sleep.\n\n"
printf " Example: sudo sleepwake\n"
printf " Wakes the system, using the default, 20 minutes after going to sleep.\n\n"
exit 1
else
# If no argument (number of minutes) was passed.
if [[ -z $1 ]]; then
# Default number of minutes to sleep.
m="20"
else
# Number of minutes to sleep given from command line.
m="$1"
fi
# Do the math and set date time format to
# what 'pmset schedule wake' requires.
e="$(date -j -f "%a %b %d %T %Z %Y" "$(date)" "+%s")"
((o=60*$m))
((e+=o))
t="$(date -r $e "+%m/%d/%Y %H:%M:%S")"
# Schedule the 'wake' date time and sleep the system.
pmset schedule wake "$t"
pmset sleepnow
# Revoke elevated privileges from this Terminal session.
sudo -k
fi
Ahora guarde el documento y ciérrelo.
En el Terminal, haga el bash script ejecutable:
chmod u+x sleepwake
Ejecutar el sleepwake
sin utilizar el comando sudo
para ver que aparece la ayuda interna.
A continuación, pruébalo durante un minuto con el siguiente comando:
sudo sleepwake 1
Escriba su contraseña cuando se le solicite y pulse Intro.
El sistema dormirá ahora durante un minuto.
Ejemplos Nota: Los ejemplos suponen que sleep wake
se guarda en un directorio que está en el $PATH
Si no es así y está en el directorio actual, utilice sudo ./sleepwake
o no en el $PATH
o el directorio actual, entonces utilice sudo /path/to/sleepwake
.
Notas adicionales:
El # Do the math...
comentario en el script significa que el bloque de código directamente debajo de él convierte el fecha hora a los segundos desde Epoch, con el fin de añadir el número de segundos en minutos para dormir a la actual fecha hora y luego volver a convertir para tener entonces un fecha hora en el formato que pmset schedule wake
requiere y este será el fecha hora x
número de minutos a partir de ahora, siendo el fecha hora de ejecución, incrementando los 20 minutos por defecto o el número de minutos pasado como argumento en la línea de comandos. Wow! :)
Una vez que el fecha hora Si se ha programado el despertar y el sistema se ha puesto en reposo, se puede despertar antes de lo previsto si se necesita acceder al sistema antes del despertar programado fecha hora por los medios habituales, pulsando el ratón o utilizando el teclado, etc.
Para más información sobre pmset
, ver que es página de manual .
0 votos
He actualizado el script para añadir
sudo -k
para revocar los privilegios elevados de la sesión de Terminal. El hecho de que el sistema va a dormir por un tiempo probablemente no es necesario ya que la sesión de sudo se agotará en ese Terminal antes de que el sistema se despierte si se duerme durante 10 minutos. Sin embargo, normalmente me gusta tenerlo allí ya que es una buena práctica en general, ya que una vez que elpmset
se ejecutan no es necesario que los privilegios elevados permanezcan en esa sesión de Terminal.