Come eseguire più comandi al riavvio usando launchctl / plist?

6

In OS X, puoi scrivere un file plist in ~/Library/LaunchAgents/ (o qualcosa di simile, a seconda di quali permessi / utenti ti piace usare) e caricarlo usando launchctl per farlo funzionare al riavvio . Tuttavia, è possibile definire più comandi nel file Plist e, in tal caso, come posso definirlo?

Ad esempio, supponiamo di voler eseguire una serie di programmi Python, come ad esempio:

python first_script.py

E poi voglio eseguire lo script dopo che il primo script è terminato (quindi non posso semplicemente definire quei due script in due file plist diversi, dato che non garantisce quale debba essere eseguito prima), voglio eseguire questo script:

python second_script.py

Uso OS X Mavericks 10.9.2.

bonus

Questo non è quello che voglio fare in questo momento e viene dal nulla ma dalla curiosità, ma è anche possibile eseguire il secondo programma a seconda del risultato del primo programma? Quindi per esempio:

python first_script.py

E se questo script ha esito positivo:

python second_script.py --result true

E se fallisce:

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

1 risposta

7

Esegui un comando shell che avvia gli altri comandi:

<?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 modifica la chiave ProgramArguments in

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

e usa uno script come questo:

#!/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
    
risposta data 30.04.2014 - 12:46
fonte

Leggi altre domande sui tag