Quelqu'un peut-il recommander un bon didacticiel pour écrire (à partir de zéro) un travail de lancement de style cron?

19

J'ai un travail assez simple que j'aimerais exécuter toutes les heures. Je pourrais le faire en utilisant cron, mais j'ai pensé que j'utiliserais cela pour en savoir plus launchd, car j'entends de bonnes choses à ce sujet. J'ai la man launchd.plistpage comme référence, mais je cherche quelque chose de plus basé sur la construction d'un exemple de travail.

Hank Gay
la source
Cela devrait être déplacé vers Stackoverflow.
Philip Regan
5
@Philip Regan J'y ai pensé, mais il n'y a pas vraiment beaucoup de programmation impliquée, pour moi. Si j'avais posé une cronquestion, superuser.com ne serait-il pas le bon endroit? Comme launchdc'est la version d'Apple cron(et aussi daemontools, et peut-être d'autres choses), je pensais que c'était ma meilleure option.
Hank Gay
Vous pouvez également le mettre dans un script d'automate et l'exécuter à partir d'iCal - s'il fonctionne comme vous
user151019
Dans une drôle d'ironie, trois ans plus tard, j'ai besoin de mettre en œuvre un processus cron / launchd moi-même et je me suis retrouvé à regarder cette question sous un jour complètement différent. Stack Overflow a une opinion mitigée sur ce qu'il faut faire avec les questions de lancement, mais ils n'aiment vraiment pas ces questions. Je pensais juste que la situation était amusante. +1
Philip Regan

Réponses:

14

launchdexécute Daemons ( /Library/LaunchDaemonsou /System/Library/LaunchDaemons) en tant que root et les exécutera, que les utilisateurs soient connectés ou non. Les agents de lancement ( /Library/LaunchAgents/ou ~/Library/LaunchAgents/) sont exécutés lorsqu'un utilisateur est connecté en tant qu'utilisateur. Vous ne pouvez pas utiliser setuid pour changer l'utilisateur exécutant le script sur les démons. Le /Systemrépertoire est réservé aux tâches Mac OS X, je vous recommande donc de placer vos launchdplists dans /Libraryle ~/Librarydossier ou dans le sens voulu .

La première étape consiste donc à déterminer si vous créez un agent ou un démon.

La deuxième étape consiste à créer votre .plistfichier. Vous pouvez utiliser des programmes basés sur l'interface graphique tels que Lingon pour vous aider ou simplement utiliser votre éditeur de texte préféré:

Un exemple .plistpour exécuter un script toutes les heures ( StartIntervalou StartIntervalCalendarsont les clés que nous voulons - StartIntervalpour qu'un élément se produise toutes les xsecondes, StartIntervalCalendarpour une heure et / ou une date spécifique. Voir 126907 sur SuperUser pour un exemple que j'ai fait avec StartCalendarInterval):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>OnDemand</key>
    <true/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartInterval</key>
    <integer>3600</integer>
</dict>
</plist>

Modifiez le .plistsi nécessaire pour pointer vers votre script et tout argument si nécessaire (les arguments sont sur des lignes distinctes) et enregistrez le fichier sous le même nom que la valeur Label mais avec .plistà la fin. (par exemple, local.my-mac.flickrstatsserait enregistré sous local.my-mac.flickrstats.plist). Si vous ne l'avez pas déjà fait, déplacez ce .plistfichier vers /Library/LaunchDaemonslors de la création d'un démon (s'exécute tout le temps) ou vers ~/Library/LaunchAgents(vous seul êtes connecté) ou /Library/LaunchAgents(tout utilisateur est connecté).

Pour démarrer le travail que vous souhaitez exécuter launchctlsi nécessaire pour charger le fichier. Pour les éléments dans /Library, vous devez utiliser sudo: par exemple,sudo launchctl load -w /PATH/TO/PLIST

Pour référence, consultez également les questions suivantes sur le super utilisateur: commande Launchd en tant que root , chargez un démon à l'échelle du système et comment puis-je obtenir un script à exécuter tous les jours

Chealion
la source
4

Je sais que ce n'est pas un bon tutoriel, mais vous pouvez consulter le Guide de programmation des démons et des services d'Apple, qui contient une section sur la planification des travaux chronométrés.

Je sais que ce n'est pas un tutoriel complet, mais avec lui, vous pouvez comprendre les bases de launchd.

Il fournit également un exemple de crondtâche:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.
com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>  
    <key>Label</key>
    <string>com.apple.periodic-daily</string>
    <key>ProgramArguments</key>
    <array> 
        <string>/usr/sbin/periodic</string>
        <string>daily</string>
    </array>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>1</integer>
    <key>StartCalendarInterval</key>
    <dict>  
        <key>Hour</key>
        <integer>3</integer>
        <key>Minute</key>
        <integer>15</integer>
    </dict>
</dict>
</plist>
Studer
la source
J'ai voté contre parce que vous avez admis que la ressource n'est pas ce que j'ai demandé et cela m'a semblé un peu RTFM, mais je l'ai repensé et j'aimerais annuler mon vote négatif. Malheureusement, je ne peux pas, sauf si la question est modifiée (cela fait trop longtemps), et je n'ai pas encore assez de représentants pour la modifier. Pourriez-vous modifier quelque chose? Merci.
Hank Gay
@Hank Gay: Merci pour votre commentaire. J'ai également modifié ma réponse.
Studer
2

Je sais que vous cherchiez un tutoriel, mais par hasard quelqu'un vient ici dans le cadre de la recherche d'un outil pour les aider à créer / modifier des entrées launchd, je l'ai déjà utilisé: Lingon (sourceforge)

Il n'est plus développé activement, mais ce qui s'y trouve fonctionne (et inclut évidemment la source, etc.). Je l'ai utilisé sur Snow Leopard pour planifier des sauvegardes sur le cloud Amazon, etc.

robsoft
la source
Lingon est maintenant dans l'App Store et est toujours actif, mais pas gratuit voir < peterborgapps.com/lingon >
user151019
La version de l'appstore a été paralysée par les exigences de la politique Apple. La version précompilée de SourceForge fonctionne bien - bien que la boîte de dialogue modale lors de l'enregistrement, me disant de me déconnecter ou de redémarrer pour activer le démon, ne se fermerait pas. J'ai dû quitter le programme à partir de son menu (pas forcer la fermeture) et vérifier pour confirmer qu'il avait correctement enregistré le fichier. Crippled dans ce déclencheur de fichier et de répertoire n'est pas pris en charge, et il n'est pas possible de créer quelque chose qui s'exécute en tant que root avec la version AppStore.
marfarma