Comment puis-je exécuter / arrêter / relancer une application automatiquement, au démarrage / à la connexion / à un autre moment?

42

Comment faire pour qu'un script ou une application s'exécute ou cesse automatiquement lorsque le système est démarré, qu'un utilisateur ouvre une session, à une heure précise, lorsqu'un disque est connecté, etc.?

Prosseek
la source
3
Lingon est juste une application pour rendre la création des fichiers .plist pour launchd plus conviviale. Une personne a également créé un créateur de pliste de
lancement
Huer! plist.spotmac.de semble avoir disparu. :-(
doc what

Réponses:

44

Méthode Gui

Si vous souhaitez que quelque chose soit exécuté lorsqu'un utilisateur se connecte, le moyen le plus simple consiste à utiliser l'interface graphique. Vous pouvez

  • Allez à l' System Prefs > Accounts > Login Itemsécran et ajoutez l'article là-bas en
    • en cliquant sur le +symbole
    • glisser et déposer le .appsur le volet
  • Dans le dock, ouvrez le menu contextuel d’une application, sélectionnez Options, puis sélectionnezOpen at Login

Méthode Launchd

Si vous voulez lancer quelque chose qui n'est pas un .app, ou vous voulez avoir plus de contrôle sur le lancement, tel que:

  • à un certain moment ou à un intervalle spécifié
  • re-lancer en permanence s'il se bloque
  • non lié à la connexion de l'utilisateur
  • en fonction de l'accès au réseau
  • exécuté uniquement lorsqu'un autre processus est en cours d'exécution
  • quand un fichier est ajouté à un dossier
  • etc.

alors vous voulez utiliser la solution technique qui est launchd.

Le moyen le plus simple de configurer un launchdfichier de configuration consiste à utiliser un outil d'aide. Au moment de la rédaction de ce document, la méthode la plus populaire est Lingon (qui possède une version gratuite plus ancienne disponible sur SourceForge) ou l’ outil PList Website .

Codage manuel

Si vous ne souhaitez pas utiliser Lingon ou le site Web PList et souhaitez uniquement utiliser les outils bruts disponibles sur le système, vous pouvez écrire les vôtres launchd plistà la main.

Voici mon script launchd pour exécuter SomeApp de manière continue après le démarrage du système (indépendamment de la connexion d'un utilisateur). Il se trouve dans / System / Library / LaunchAgents / et s'appelle SomeApp.restart.plist. S'il est exécuté sur la base d'une connexion utilisateur, il pourrait être stocké dans ~ / Library / LaunchAgents /

<?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>RunAtLoad</key>  
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>SomeApp.restart</string>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/SomeApp.app/Contents/MacOS/SomeApp</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>5</integer>
            <key>Minute</key>
            <integer>10</integer>
       </dict>
</dict>
</plist>

Chargez-le une fois avec

launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
  • L' RunAtLoadoption lancera l'application la première fois que launchctl l'exécutera.
  • L' KeepAliveoption relancera l'application si elle se bloque.
  • Le StartCalendarIntervalsera exécuté à un moment donné. On peut supposer que cela est mutuellement exclusif avec les deux précédents, mais est inclus pour montrer ce qui peut être fait aveclaunchd
  • Launchctl va l'exécuter après les redémarrages.

Il existe de nombreuses options supplémentaires qui peuvent être trouvées en expérimentant avec Lingon ou en lisant les pages de manuel launchctl, launchd.plist, plist, launchd.conf, etc.


la source
Merci, vraiment utile. Vous pouvez également utiliser launchctl load -w ...pour rendre le changement persistant. Sur la base de vos commentaires, j'ai mis à jour mon script OSX poweruser configurator
sorin
8

Lingon fonctionne toujours. Je viens de l'utiliser la semaine dernière pour créer une "tâche planifiée". Après l'avoir téléchargée, j'ai dû utiliser son programme de mise à jour automatique pour obtenir la dernière version, mais cela fonctionne bien.

Robert S Ciaccio
la source
1
Lingon aussi est maintenant sur l'App Store
user151019
1
Mais pour trouver la version gratuite et open source, vous devez l'extraire de Sourceforge. La dernière version commerciale ne fonctionne pas non plus sur Leopard (10.5). Mais 2.1.1 le fait - voir sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb le
7

S'il est uniquement nécessaire de s'exécuter au démarrage du système, utilisez simplement l' onglet Eléments de connexion du volet des préférences Comptes dans les préférences Système.

texte alternatif

S'il s'agit d'un script, utilisez AppleScript Editor pour l'enregistrer en tant qu'application. S'il ne s'agit pas d'un script AppleScript, vous pouvez toujours utiliser AppleScript pour l'exécuter comme suit:

do shell script "your script here"

ghoppe
la source
Hein? Êtes-vous sûr de cela ? Il est indiqué dans l'interface utilisateur de votre capture d'écran "Ces éléments s'ouvrent automatiquement lorsque vous vous connectez" - n'est-ce pas différent de celui qui a été initialisé par le système? De plus, votre lien semble être 404.
ssc
5

N'oubliez pas Loginhooks.

Bien qu'ils fonctionnent en tant que root, vous devriez pouvoir le faire exécuter un script $ HOME / .loginhook en utilisant quelque chose comme:

#!/bin/sh

home=`eval echo ~$user`

if [ -x "$home/.loginhook" ]; then
    logger -t $0 "executing .loginhook of user $user"
    su - $user -c "$home/.loginhook"
fi

Ensuite, ajoutez simplement les commandes que vous voulez au ~ / .loginhook

De plus, bien que 'launchd' soit "à la manière de Mac", crontab reste une option parfaitement viable et est beaucoup plus facile à modifier manuellement que les fichiers XML launchd.

Personnellement, j'ai volontiers payé 5 $ pour Lingon .

TJ Luoma
la source
Donc, le script dans le bloc de code doit être enregistré sous /path/to/script, et sudo defaults write com.apple.loginwindow LoginHook /path/to/script? Et le point en exécutant un script dans le répertoire de base est que chaque utilisateur peut avoir une coutume (ou non) ~/.loginhook?
Lri
@Lri - oui, précisément. Désolé, ce n'était pas plus clair. Le code de bloc pourrait être /usr/local/bin/loginhook.sh et, puisqu'il est exécuté par root, il recherchera un $ HOME / .loginhook lorsqu'un utilisateur se connectera et l'exécutera en tant que cet utilisateur.
TJ Luoma
4

Exécuter une application à une heure précise peut être fait facilement dans iCal, comme je viens de le savoir grâce à un autre forum!

  1. Créez un nouvel événement dans iCal à l'heure à laquelle vous souhaitez que l'application s'ouvre.
  2. Dans "Alerte", choisissez "Ouvrir le fichier". Vous pouvez donc définir un fichier à ouvrir, qui ouvrira évidemment également l'application par défaut pour ce type de fichier.
  3. Pour ouvrir une application plutôt qu'un fichier, modifiez le menu déroulant "iCal" en "Autre ..." et choisissez l'application que vous souhaitez exécuter!

Une chose à savoir est que si vous avez plusieurs Mac partageant des contenus sur iCloud, cet événement sera également exécuté sur ces applications, que vous souhaitiez ou non. Pour que cela ne se produise que sur un seul Mac, vous devez créer l'événement dans un calendrier "Sur mon Mac". Pour ce faire, procédez comme suit ...

  1. Cachez tous les autres calendriers iCloud ou partagés dans la barre de gauche en survolant le nom du calendrier et en cliquant sur le bouton "masquer" qui apparaît.
  2. Maintenant, faites un clic droit (ou Option cliquez si vous êtes un crétin complet et que vous ne réalisez toujours pas que vous avez plus d'un doigt et que vous pouvez modifier les préférences de votre souris de sorte qu'elles soient légèrement plus utiles que l'état par défaut "brique crétineuse pour les crétins". ) et choisissez 'Nouveau calendrier'.
  3. Tous les calendriers partagés étant masqués, ce nouveau calendrier sera créé en tant que "Sur mon Mac" et sera local pour ce Mac.

Je viens tout juste de découvrir cela moi-même et j'ai été agréablement surpris par les deux conseils, alors je pensais les partager ici.

J'ai eu l'info de ces gens utiles ici ... alors merci à vous, les gens! ...

http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/

Slowboy
la source