Comment puis-je exécuter un script tous les jours sur Mac OS X?

Réponses:

62

Pour référence, les 3 options fonctionneraient. L'option iCal a cependant plus de limitations que les autres.

(Il y a des interfaces graphiques pour éditer cron et launchd comme mentionné dans d'autres réponses)

Cron est le plus simple et le plus connu et de nombreux tutoriels sont disponibles. Coles Notes consiste à ajouter la dernière ligne d'en bas à votre crontab (soit en la modifiant, /etc/crontabsoit en utilisant crontabla ligne de commande):

MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"

Sous Mac OS X, il crona été remplacé par le précédent launchdmais launchdest compatible avec les versions antérieures, cronce qui signifie que vous pouvez toujours l'utiliser, cronmais que launchdtout le travail est fait.

Si vous voulez utiliser, launchdvous voudrez également vérifier d’autres questions ici sur le super utilisateur: (par exemple, comment exécuter une commande launchd en tant que root? ) Pour savoir où vous voulez enregistrer votre fichier de configuration (le fichier plist) comme quand il fonctionne dépend dans quel répertoire il est stocké et comment il est chargé (par exemple si vous avez utilisé sudo ou non) - similaire à cron.

Un exemple de plist lancé quotidiennement (assurez-vous que le fichier et l'étiquette sont identiques - moins le plist de l'étiquette) suit - ce script est exécuté tous les jours à 3 heures et demie:

<?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>KeepAlive</key>
    <false/>
    <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>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>00</integer>
        <key>Minute</key>
        <integer>03</integer>
    </dict>
</dict>
</plist>

Il est également intéressant de noter que les tâches launchd si elles étaient planifiées lorsque l'ordinateur est endormi ou éteint, elles s'exécuteront lorsque l'ordinateur redeviendra disponible (en l'allumant ou en le réveillant) - bien qu'une seule fois, peu importe combien de jours il peut avoir. été. Edit: Je viens de lire un document Apple qui indique que si la machine est hors tension, vous perdrez tous les événements de lancement pendant cette période (votre script ne se lancera pas au démarrage), (la veille le lance lorsque vous vous réveillez).


Une autre option consiste à utiliser " à " (consultez la page de manuel avec "man à"). Le script peut se replanifier avec par exemple:

echo "sh $0 $@" | at `date +%H:%M` tomorrow

(utilisez "+ 10 minutes" au lieu de "demain" pour l'exécuter toutes les 10 minutes; pour arrêter la planification, il suffit de faire "en -l" pour répertorier les ID de travail planifié, puis "en -r id " pour supprimer le travail)

Vous devrez peut-être d'abord démarrer le démon correspondant (atrun) avec (voir https://superuser.com/a/43680 ):

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Avantages: solution rapide, aucun accès sudo / root requis, modèles de planification compliqués faciles à effectuer Inconvénient: méthode de planification non standard pour OS X (launchd)

Chealion
la source
8
Monsieur, pour votre exemple de fichier de configuration launchd, je pourrais vous embrasser . Mais je ne le ferai pas.
Paul D. Waite le
5
launchdest la voie à suivre sous OS X.
zneak
Oui, c'était mon impression. On dirait que Tiger a eu quelques problèmes en arrière, mais Apple semble l'avoir aiguisé depuis.
Paul D. Waite le
Sous Os 10.7.4, il n'y a pas de fichier / etc / crontab. ): Alors j'ai fait 'quelle crontab' et cela m'a donné / usr / bin / crontab mais c'est un fichier brouillé.
Hermann Ingjaldsson
@ HermannIngjaldsson / usr / bin / crontab est un programme; si vous l'exécutez dans un terminal avec crontab -e, il vous déposera dans un éditeur de texte basé sur un terminal sur un fichier qui deviendra votre crontab personnel lorsque vous l'enregistrez.
Mark Reed
8

LaunchControl est une autre interface graphique pour launchd / launchctl. Alors que les alternatives mentionnées par d’autres sont parfaitement capables de lancer un script au quotidien, avec LaunchControl, vous pouvez configurer des planifications complexes (comme "une fois par jour, chaque week-end, toutes les heures entre 14h00 et 20h00"). En outre, il est (AFAIK) le seul outil qui valide réellement le travail. Si un travail ne fonctionne pas comme prévu, il vous montrera pourquoi.

C'est gratuit d'essayer aussi longtemps que vous le souhaitez.

Mark Hall
la source
3
Bien qu'il soit gratuit d'essayer / d'utiliser, le développeur préférerait que vous payiez pour la licence. sites.fastspring.com/somazone/product/shop
Kent
1
Absolument. La première raison pour laquelle j'ai posté cette réponse était de soutenir le développeur.
Mark Hall
5

CronniX est une interface graphique agréable pour la planification de tâches cron sur le mac ... Plutôt décent si vous ne voulez pas aller fouiller dans la documentation de cron.

Zoran
la source
2
  • Pour iCal, vous pouvez lire cet article .
  • Vous devriez trouver assez de tutoriels pour cronsi vous google pour cela.

Cela dépend de ce que vous voulez: les scripts iCal ne seront exécutés que si vous êtes connecté, cronexécute le script sans être connecté. Je ne sais pas si iCal exécute un script si le Mac a été désactivé au moment où il aurait dû l'être. été exécuté. cronfait cela.

Félix
la source
2

Une mise à jour: vous pouvez consulter certaines applications dans le Mac OS X App Store qui font ceci:

Lingon semble également être disponible, en fonction du système d'exploitation que vous utilisez.

Steve Cooley
la source
2

Voici un utilitaire simple et gratuit pour générer du XML plist:

http://www.gieson.com/Library/projects/utilities/launcha/

Avec cet util, il n’est pas nécessaire d’installer un programme, il suffit d’enregistrer les résultats dans votre dossier Library / LaunchAgents.

bob
la source
Attention: si vous utilisez cet outil, assurez-vous qu’il RunAtStartest défini sur false (à moins que vous ne le vouliez). J'ai passé une heure à comprendre pourquoi mon Finder gèlerait et empêcherait le chargement du bureau au démarrage. La désactivation RunAtStartn'interfère pas avec l'horaire fixe.
Andrea Lazzarotto
1

J'utilise toujours Lingon pour cela, mais on dirait que c'est en développement. Vous pouvez essayer Crontooie , mais je ne l'ai jamais utilisé personnellement. Ou simplement éditer le fichier crontab dans le terminal.

Josh
la source
Il me semble que Lingon est en développement actif ; la version actuelle 3 est disponible dans l'AppStore avec la version précédente 2. Les deux coûtent quelques dollars et reçoivent des critiques mitigées. Personnellement, j'utilise Lingon 3 avec un certain succès, mais je ne le recommanderais pas dans le but de cet article par rapport à d'autres outils mentionnés dans d'autres réponses (cron, at, etc.).
SSC
La dernière fois que j'ai utilisé Lingon, c'était il y a plus de 2 ans. À l'époque, cela fonctionnait bien pour moi, mais je n'ai pas utilisé les dernières versions. Dommage que ce ne soit plus aussi fiable qu’il était.
Josh
0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

... quelle que soit la ligne de commande utilisée pour ".... couper ....", elle sera exécutée toutes les cinq minutes.

30 ans de progrès et «cron» est toujours mon ordonnanceur préféré.

-C

CJ Steele
la source
0

Si un événement de calendrier répond à vos besoins, l'application Automator intégrée vous permet également de créer des alarmes de calendrier déclenchées par des événements de calendrier. Vous pouvez utiliser certaines des actions intégrées basées sur l'interface utilisateur pour faire ce que vous voulez, ou vous pouvez également le laisser exécuter une application ou un script personnalisé AppleScript, JavaScript ou shell.

Brett Zamir
la source