web-dev-qa-db-fra.com

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

Cron? Lancé? iCal ??

Si c'est le cas, comment?

60
Paul D. Waite

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 modifiant /etc/crontab, soit en utilisant crontab sur la 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, cron a en fait été remplacé par launchd, mais launchd est rétrocompatible avec cron, ce qui signifie que vous pouvez toujours utiliser cron mais que launchd fait tout le travail.

Si vous voulez utiliser launchd, vous voudrez également consulter d'autres questions ici sur le super utilisateur: (par exemple. Comment exécuter une commande launchd en tant qu'utilisateur root? ) pour savoir où vous souhaitez enregistrer votre fichier de configuration (le fichier plist) dépend du répertoire dans lequel il est stocké et de la manière dont 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, seront exécutées lorsque l'ordinateur sera à nouveau disponible (qu'il soit allumé ou réveillé) - bien qu'une seule fois, peu importe le nombre de jours qu'il peut avoir. été. Edit: Je viens de lire un document Apple qui dit que si la machine est éteinte, 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 " at " (consultez la page de manuel avec "man at"). 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 _" supprimer le travail)

Vous devrez peut-être démarrer le démon correspondant (atrun) d’abord 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 (qui est launchd)

60
Chealion

LaunchControl est une autre interface graphique de 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.

8
Mark Hall

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.

5
Zoran

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.

2
bob

Une mise à jour: vous pouvez consulter certaines applications de l'App Store Mac OS X qui font ceci:

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

2
Steve Cooley
  • Pour iCal, vous pouvez lire cet article article .
  • Vous devriez trouver assez de tutoriels pour cron si vous le cherchez sur Google.

Cela dépend de ce que vous voulez: les scripts iCal ne seront exécutés que si vous êtes connecté, cron exécute le script sans être connecté. Je ne sais pas si iCal exécute un script si le Mac a été éteint au moment où il devrait ont été exécutés. cron fait cela.

2
Felix

Si vous voulez essayer le GRATUIT, je suggérerais Task Till Dawn

 enter image description here

http://www.macupdate.com/app/mac/33283/task-till-dawn

1
kyo

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.

1
Josh
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

0
C.J. Steele

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.

0
Brett Zamir