9 votes

Comment lancer plusieurs commandes au redémarrage en utilisant launchctl/plist ?

Dans OS X, vous pouvez écrire un fichier plist dans ~/Library/LaunchAgents/ (ou quelque chose de similaire, en fonction des permissions/utilisateurs sur lesquels vous souhaitez qu'il soit exploité), et le charger en utilisant launchctl pour qu'il fonctionne au redémarrage. Cependant, est-il possible de définir plusieurs commandes dans le fichier plist, et si c'est le cas, comment puis-je le définir ?

Par exemple, supposons que je veuille exécuter une série de programmes Python, tels que :

python first_script.py

Et ensuite je veux exécuter le script après que le premier script soit fait (donc je ne peux pas simplement définir ces deux script dans deux fichiers plist différents, puisque cela ne garantit pas lequel sera exécuté en premier), je veux exécuter ce script :

python second_script.py

J'utilise OS X Mavericks 10.9.2.

bonus

Ce n'est pas ce que je veux faire pour l'instant et cela ne vient que de la curiosité, mais est-il également possible d'exécuter le second programme en fonction du résultat du premier ? Donc, par exemple :

python first_script.py

Et si ce script réussit :

python second_script.py --result true

Et si ça échoue :

python second_script.py --result false --reason XXX

10voto

Fuzzy Purple Monkey Points 702

Exécutez une commande shell qui lance les autres commandes :

<?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>

Ou changez le ProgramArguments pour

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

et utiliser un script comme ceci :

#!/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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X