Question

Comment puis-je exécuter un script toutes les 30 minutes? Je suppose qu'il existe différentes manières pour différents systèmes d'exploitation. J'utilise OS X.

Était-ce utile?

La solution

Utilisez simplement launchd . Il s’agit d’un système de lancement très puissant et, dans l’intervalle, c’est le système de lancement standard pour Mac OS X (la version actuelle d’OS X ne pourrait même pas démarrer sans cela). Pour ceux qui ne sont pas familiers avec launchd (ou avec OS X en général), cela ressemble à un croisement entre init , cron , sur , SysVinit ( init.d ), inetd , upstart et systemd . Emprunter les concepts de tous ces projets, mais aussi proposer des choses que vous ne trouverez peut-être pas ailleurs.

Chaque service / tâche est un fichier. L’emplacement du fichier dépend des questions suivantes: "Quand ce service est-il censé être exécuté?" et "De quels privilèges le service aura-t-il besoin?"

Les tâches système vont à

/Library/LaunchDaemons/

s’ils doivent s’exécuter, peu importe si un utilisateur est connecté au système ou non. Ils seront lancés avec & root; root " privilèges.

S'ils ne doivent s'exécuter que si un utilisateur est connecté, ils se rendent sur

.
/Library/LaunchAgents/

et sera exécuté avec les privilèges de l'utilisateur qui vient de se connecter.

S'ils ne doivent exécuter que si vous êtes connecté, ils se rendent sur

.
~/Library/LaunchAgents/

où ~ est votre répertoire personnel. Ces tâches s’exécuteront avec vos privilèges, comme si vous les aviez lancées vous-même en ligne de commande ou en double-cliquant sur un fichier dans le Finder.

Notez qu'il existe aussi / System / Library / LaunchDaemons et / System / Library / LaunchAgents , mais comme d'habitude, tout ce qui se trouve sous / System est géré par OS X. Vous ne devez y placer aucun fichier, vous ne devez en changer, sauf si vous savez vraiment ce que vous faites. Déconner dans le dossier Systèmes peut rendre votre système inutilisable (mettez-le dans un état dans lequel il refusera même de redémarrer). Ce sont les répertoires dans lesquels Apple place les tâches launchd qui assurent le fonctionnement de votre système au démarrage, démarrent automatiquement les services requis, effectuent des tâches de maintenance du système, etc.

.

Chaque tâche launchd contient un fichier au format plist. Il devrait avoir une notation inverse du nom de domaine. Par exemple. vous pouvez nommer votre tâche

com.example.my-fancy-task.plist

Cette plist peut avoir diverses options et paramètres. L'écriture une par main est sous-optimale, vous pouvez vous procurer l'outil gratuit Lingon pour créer vos tâches. Auparavant, cet outil était gratuit. Il coûte désormais 5 USD dans l'App Store et 10 USD en version non App Store (la version non App Store est beaucoup plus puissante et si vous envisagez déjà de payer, sérieusement, procurez-vous le non App Store. version). Si quelqu'un connaît un outil comparable gratuit ou open source, écrivez-moi dans les commentaires et je le recommanderai plutôt (vous ne voulez pas faire de publicité ici pour un logiciel commercial).

À titre d'exemple, cela pourrait ressembler à ceci

<?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.example.my-fancy-task</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/my-script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>1800</integer>
</dict>
</plist>

Cet agent exécutera le script de shell /usr/local/bin/my-script.sh toutes les 1 800 secondes (toutes les 30 minutes). Vous pouvez également faire en sorte que la tâche soit exécutée à certaines dates / heures (en principe, launchd peut faire tout ce que cron peut faire) ou vous pouvez même désactiver " OnDemand " obligeant launchd à laisser le processus fonctionner en permanence (s'il se ferme ou se bloque, launchd le redémarre immédiatement). Vous pouvez même limiter la quantité de ressources qu'un processus peut utiliser (comme indiqué précédemment, Lingon affiche tous ces paramètres dans une interface utilisateur conviviale).

Mise à jour: Même si OnDemand est toujours pris en charge, il est obsolète. Le nouveau paramètre est nommé KeepAlive , ce qui est beaucoup plus logique. Il peut avoir une valeur booléenne, auquel cas il s'agit de l'exact opposé de OnDemand (le définir sur false se comporte comme si OnDemand était true et inversement). La grande nouveauté est qu’il peut également avoir une valeur dictionnaire au lieu d’une valeur booléenne. Si elle a une valeur de dictionnaire, vous avez deux options supplémentaires qui vous permettent de mieux contrôler le grain dans quelles circonstances la tâche doit être maintenue. Par exemple. il est uniquement maintenu en vie tant que le programme est terminé avec un code de sortie égal à zéro, tant qu'un certain fichier / répertoire existe sur le disque, uniquement si une autre tâche est également active ou uniquement si le réseau est actif.

Vous pouvez également activer / désactiver manuellement les tâches via la ligne de commande:

launchctl <command> <parameter>
La commande

peut être charger ou décharger, pour charger un plist ou le décharger à nouveau, auquel cas paramètre est le chemin du fichier. Vous pouvez également lancer ou arrêter une commande, pour démarrer ou arrêter simplement une telle tâche, auquel cas le paramètre est l’étiquette (com.example.my-fancy-task). D'autres commandes et options existent également.

Voir la documentation Apple sur format plist et du outil de ligne de commande launchctl (notez que vous pouvez sélectionner la version OS X par dessus, car le format / les options varient entre différentes versions d'OS X)

Autres conseils

vous pouvez utiliser le très pratique générateur de listes de plis: http://launched.zerowidth.com/ (nul besoin d'acheter quoi que ce soit & # 8230;)

cela vous donnera une ligne de commande shell pour enregistrer un nouveau travail planifié avec le launchd recommandé

.

Sous MacOSX, vous disposez au minimum des options suivantes:

Par expérience personnelle, cron est le plus fiable. Quand j'ai testé, launchd avait un certain nombre de bugs et de bizarreries. Les alarmes iCal ne se déclenchent que lorsque vous êtes connecté (mais cela peut être quelque chose que vous préférez).

Comme Mecki l’a fait remarquer, launchd serait la solution. Il existe une interface graphique pour launchd appelée Lingon que vous pouvez consulter, par opposition à la modification de la lancer les fichiers à la main:

  

Lingon est une interface utilisateur graphique permettant de créer une édition   fichiers de configuration pour Mac OS X Leopard 10.5.

     

[snip ...]

     

Éditer un fichier de configuration est plus facile que jamais dans cette version   et il a deux modes différents. Mode de base qui a le plus commun   paramètres facilement disponibles dans une interface très simple et en mode expert   où vous pouvez ajouter tous les paramètres directement dans le texte ou insérer   les via un menu.

MAC OS dispose d'un outil Automator identique à celui de Planificateur de tâches dans Windows. Et à l'aide d'Automator, vous pouvez planifier des tâches sur une base quotidienne et associer la tâche à un événement de calendrier récurrent afin d'exécuter des scripts à une heure précise chaque jour. lien de référence pour exécuter des scripts tous les jours sous Mac OS

Pour les scripts Apple, j'ai configuré un calendrier iCal spécial et utilisé des alarmes pour les exécuter périodiquement. Pour les outils de ligne de commande, j'utilise launchd.

FYI: Même si ça me manque, c'est la simplicité, cron est une chose du passé sur OS X. C'était un chien de garde sur Panther. Depuis Tiger, il a été lancé. Donc, si vous utilisez Leopard cron, ce n’est pas une option.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top