¿Cómo ejecutar varios comandos al reiniciar usando launchctl / plist?

5

En OS X, puede escribir un archivo plist en ~/Library/LaunchAgents/ (o algo similar, dependiendo de los permisos / usuarios que desea que se utilicen), y cargarlo usando launchctl para que funcione en el reinicio . Sin embargo, ¿es posible definir varios comandos en el archivo plist, y si ese es el caso, cómo puedo definirlo?

Por ejemplo, supongamos que quiero ejecutar una serie de programas de Python, como:

python first_script.py

Y luego quiero ejecutar el script después de que se complete el primer script (por lo que no puedo definir esos dos scripts en dos archivos plist diferentes, ya que no garantiza cuál ejecutarse primero), quiero ejecutar este script:

python second_script.py

Uso OS X Mavericks 10.9.2.

bonificación

Esto no es lo que quiero hacer en este momento y no viene de nada más que curiosidad, pero ¿también es posible ejecutar el segundo programa dependiendo del resultado del primer programa? Así por ejemplo:

python first_script.py

Y si este script tiene éxito:

python second_script.py --result true

Y si falla:

python second_script.py --result false --reason XXX
    
pregunta Blaszard 26.04.2014 - 10:29

1 respuesta

6

Ejecuta un comando de shell que inicie los otros comandos:

<?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>Label</key>
  <string>some.label</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>python first_script.py;python second_script.py</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

O cambia la clave ProgramArguments a

<key>Program</key>
<string>/path/to/script</string>

y usa un script como este:

#!/bin/bash

output=$(python first_script.py 2>&1)
if [[ $? = 0 ]]; then
  python second_script.py --result true
else
  python second_script.py --result --false --reason "$output"
fi
    
respondido por el user495470 30.04.2014 - 12:46

Lea otras preguntas en las etiquetas