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.?
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.?
Réponses:
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
System Prefs > Accounts > Login Items
écran et ajoutez l'article là-bas en
+
symbole.app
sur le voletOptions
, puis sélectionnezOpen at Login
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:
alors vous voulez utiliser la solution technique qui est launchd
.
Le moyen le plus simple de configurer un launchd
fichier 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 .
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
RunAtLoad
option lancera l'application la première fois que launchctl l'exécutera.KeepAlive
option relancera l'application si elle se bloque.StartCalendarInterval
sera 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
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.
launchctl load -w ...
pour rendre le changement persistant. Sur la base de vos commentaires, j'ai mis à jour mon script OSX poweruser configurator
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.
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.
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"
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 .
/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
?
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!
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 ...
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/