12 votos

¿Cómo ejecutar script en estela?

Estoy buscando un método para ejecutar una secuencia de comandos (bien, solo un comando de la shell) cuando mi laptop se despierta de su sueño.

Esta pregunta se ha hecho antes, pero hace 8 años (para OS X Lion), y varias de las respuestas requieren de productos de terceros que no son desarrollados.

Otra opción podría ser para la secuencia de comandos para ejecutar en cualquier momento, una vez por día, cuando está funcionando, pero no quiero que se pierda un tiempo asignado de la ranura de la justa causa no despierto. Yo no estoy tan preocupado acerca de la activación de una secuencia de comandos a la hora de dormir.

8voto

Edd Growl Puntos 58

Usted podría instalar SleepWatcher a través de homebrew y establecer una .estela de código con la secuencia de comandos que ejecutará cada vez que su ordenador portátil se despierta de su sueño.

El uso de SleepWatcher: hacer un script de shell en su directorio principal llamado .despertar y darle permisos con el comando chmod +x ~/.wake.

Usted puede encontrar la manera de utilizar SleepWatcher aquí

8voto

Joel Puntos 112

launchd puede hacer lo que usted necesita. Mientras que su sistema no está dormido todo el día, y está previsto el uso de la StartCalendarInterval (ver abajo), launchd va a ejecutar la secuencia de comandos una vez al día. Aquí es lo que quiero decir:

  • Si usted programar un script para que se ejecute en (por ejemplo) 12:00 del mediodía, Y tu mac se despierta a las 12:00 del mediodía, a continuación, el script se ejecutará a las 12:00 del mediodía.
  • Si usted programar un script para que se ejecute en (por ejemplo) 12:00 del mediodía, PERO el mac está en reposo a las 12:00 del mediodía, a continuación, el script se ejecutará tan pronto como su mac se despierta.

En mi humilde opinión, launchd tiene una ventaja porque es parte de MacOS. La única 3ª parte de la herramienta que desee utilizar con es LaunchControl (en lugar de la nativa launchctl). LaunchControl es una interfaz gráfica de usuario basada en la aplicación utiliza solamente para ayudarle a crear/editar su .plist, y puede ayudar a la gestión y solución de problemas si es necesario. El .plist archivo contiene las instrucciones que serán utilizados por launchd a iniciar el programa, y puede ser muy simple. Y, por supuesto, usted puede evitar 3rd party software completamente por la simple creación de la necesaria .plist "manualmente" con un editor de texto.

Como se mencionó anteriormente, la clave de configuración que necesita para utilizar en su .plist para programar el tiempo para ejecutar su trabajo/script StartCalendarInterval. De acuerdo a man launchd.plist:

A diferencia de cron, que salta de trabajo invocaciones cuando el ordenador se encuentra en reposo, launchd comenzará el trabajo la próxima vez que el equipo se despierta. Si varios intervalos de transcurrir antes de que el equipo se despierta, los eventos se fundieron en un evento sobre el despertar de un sueño.

Ejemplo

He aquí un ejemplo de cómo utilizar launchda crear un User Agent. El alcance de una User Agent es que sólo se ejecuta para un solo usuario. Tenga en cuenta que también es posible crear Global Agento una Global Daemon que se extiende por varios/todos los usuarios, pero vamos a dejar eso para otro día. :

  1. Crear una secuencia de comandos en el directorio de inicio (~/) a la salida de la fecha y la hora cada vez que se ejecute:
#!/bin/bash
CURRENTDATE=`date +"%c"`
echo Current Date and Time is: ${CURRENTDATE}

Nombre de la secuencia de comandos echodatetime.sh & hacerlo ejecutable:

$ chmod 755 ~/echodatetime.sh  
  1. Crear una .plist archivo en ~/Library/LaunchAgents/mdf.simple.exampleofPLIST.plist:

EDIT: ¡NOTA! NO USE ~/ como acceso directo para el directorio home del usuario! Usted debe utilizar una ruta de acceso completa de la especificación, o no funcionará.

<?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>Disabled</key>
    <false/>
    <key>Label</key>
    <string>seamus.simple.example</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/seamus/echodatetime.sh</string>
    </array>
    <key>StandardErrorPath</key>
    <string>/Users/seamus/echodatetime.error.txt</string>
    <key>StandardOutPath</key>
    <string>/Users/seamus/echodatetime.log.txt</string>
    <key>StartCalendarInterval</key>
    <array>
      <dict>
          <key>Hour</key>
          <integer>1</integer>
          <key>Minute</key>
          <integer>25</integer>
      </dict>
      <dict>
          <key>Hour</key>
          <integer>1</integer>
          <key>Minute</key>
          <integer>26</integer>
      </dict>
      <dict>
          <key>Hour</key>
          <integer>1</integer>
          <key>Minute</key>
          <integer>27</integer>
      </dict>
      <dict>
          <key>Hour</key>
          <integer>1</integer>
          <key>Minute</key>
          <integer>28</integer>
      </dict>
      <dict>
          <key>Hour</key>
          <integer>1</integer>
          <key>Minute</key>
          <integer>29</integer>
      </dict>
    </array>
</dict>
</plist>

Este .plist hará ~/echodatetime.sh ser ejecutado en los siguientes horarios de cada día:
01:25
01:26
01:27
01:28
01:29

Usted puede cambiar el integer valores en la matriz de la clave StartCalendarInterval , para llegar en el momento que más le convenga. Este es solo un ejemplo que he utilizado para las pruebas.

El ejemplo anterior muestra una "ráfaga" de cinco (5) se ejecuta en intervalos de un minuto. Esto fue hecho para demostrar algo extraño sintaxis necesaria para un calendario. La programación de un evento único para que se ejecute una vez al día, cada día, a las 12:00 del mediodía se puede lograr sustituyendo el más simple StartCalendarInterval clave se muestra a continuación en la .plist se muestra arriba:

    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>12</integer>
            <key>Minute</key>
            <integer>0</integer>
        </dict>
    </array>  
  1. load su trabajo y comprobar que se está ejecutando:
$ launchctl load ~/Library/LaunchAgents/sdm.simple.exampleofPLIST.plist  
$ launchctl list | grep seamus
  -   0   seamus.simple.example 
  1. Supervisar el archivo de salida declarado en la StandardOutPath clave:
$ tail -f ~/echodatetime.log.txt  

Después de la loading el .plist archivo, puedes ver la datetime de salida en el tiempo señalado en la StartCalendarInterval clave: intervalos de un minuto comienzo a las 01:25 y termina a las 01:29 si uso mi .plist archivo.

Miscelánea

  • El .plist archivos anteriores han sido probados y funcionan correctamente en mi macbook pro con Mojave (ver 10.14.6). También se verificó el comportamiento de launchd cuando una programación de eventos que se produce durante la sleep: La tarea se ejecutó inmediatamente después de la mac "se despertó", y se registra el tiempo que se despierta (es decir, no de la hora programada).

  • Sí, el .plist sintaxis es arcano! Considere el uso de LaunchControl en lugar de manualmente hacking estos archivos.

  • Potencialmente útiles sugerencia: puede comprobar Que la sintaxis de su .plist archivo así:

$ plutil -lint /Users/seamus/Library/LaunchAgents/sdm.simple.exampleofPLIST.plist  
/Users/seamus/Library/LaunchAgents/sdm.simple.exampleofPLIST.plist: OK  
  • Cuando haya terminado con este ejemplo, usted puede remove el trabajo de launchd, y, a continuación, eliminar o mover el archivo desde tu carpeta ~/Library/LaunchAgents. De lo contrario, su trabajo será re-iniciado por launchd próxima vez que inicie sesión en:
$ launchctl remove seamus.simple.example  
$ mv ~/LaunchAgents/sdm.simple.exampleofPLIST.plist ~/archive

Alternativamente, deje el archivo donde está, y establecer el Disabled clave true en el .plist:

    <key>Disabled</key>
    <true/>  

8voto

moodforaday Puntos 2633

3voto

user3439894 Puntos 5883

Yo uso un programa llamado EventScripts que entre los eventos que monitorea, no es el Equipo se reactiva evento. Utiliza AppleScript secuencias de comandos para realizar la acción(s) que usted desea que suceda cuando un determinado evento es disparado.

Usted dijo: "estoy buscando un método para ejecutar una secuencia de comandos (bien, solo un comando de la shell) cuando mi laptop se despierta de su sueño.", también puede ejecutar un comando de la shell mediante el AppleScript do shell script comando.


Es una aplicación de pago, $3.99 USD, pero tiene una versión demo se puede descargar para probar antes de comprar.


Nota: Otros el ser pagados de usuario de esta aplicación, no tengo ninguna afiliación con su desarrollador.

1voto

Steve Evans Puntos 155

Administrador De Energía

DssW Power Manager es capaz de ejecutar secuencias de comandos en la vigilia. Secuencias de comandos se puede ejecutar como un usuario específico o dentro de los activos gráfica de usuario de la sesión.

Se menciona en el original aceptado respuesta hace ocho años, el Gestor de Energía ha sido desarrollado y apoyado desde 1997.

Yo trabajo en el Gestor de Energía; así que siéntase libre de hacer preguntas técnicas acerca de cómo funciona.

Power Manager on macOS

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X