6 votos

¿Cómo ejecutar múltiples comandos al reiniciar usando launchctl/plist?

En OS X, puede escribir un archivo plist en ~/Library/LaunchAgents/ (o algo similar, dependiendo de con qué permisos/usuarios quieras que funcione), y cárgalo usando launchctl para que funcione al reiniciar. Sin embargo, ¿es posible definir múltiples 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 Python, como:

python first_script.py

Y luego quiero ejecutar el script después de que el primer script esté hecho (así que no puedo simplemente definir esos dos script en dos archivos plist diferentes, ya que no garantiza cuál se ejecutará primero), quiero ejecutar este script:

python second_script.py

Utilizo OS X Mavericks 10.9.2.

bonificación

Esto no es lo que quiero hacer ahora mismo y no viene más que por curiosidad, pero ¿es posible también ejecutar el segundo programa en función del resultado del primero? 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

8voto

Fuzzy Purple Monkey Puntos 702

Ejecuta un comando 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 cambiar el ProgramArguments clave para

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

y utilizar 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

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