2 votes

Comment exécuter une application à intervalles réguliers en utilisant launchd?

J'ai une application qui est écrite dans le langage AppleScript qui vérifie si l'état S.M.A.R.T. est 'Vérifié', si ce n'est pas le cas, elle m'affichera automatiquement une alerte avec une boîte de dialogue. Mais j'ai besoin qu'elle s'exécute toutes les 30 minutes. J'ai utilisé cron auparavant mais cela ne fonctionne jamais avec l'extension .app. Comment puis-je accomplir l'exécution de l'application à intervalles réguliers en utilisant launchd?

2 votes

Launchd ne fonctionne pas avec les bundles d'applications (qui ne sont qu'un dossier). Vous devez toujours choisir le binaire (par exemple /usr/local/sbin/smartmontool or *.app/Contents/MacOS/app_binary)

0 votes

Pas que je sois contre AppleScript, mais cela ne serait-il pas beaucoup, beaucoup plus facile en bash?

0 votes

@Allan Cela dépend en partie de la facilité avec laquelle on peut écrire des scripts en bash par rapport à AppleScript. Il pourrait être utile d'utiliser une combinaison des deux. Utilisez bash pour vérifier le statut S.M.A.R.T. et AppleScript via osascript pour afficher une boîte de dialogue ou une notification dans le Centre de notifications. Mais c'est aussi à cela que sert do shell script en AppleScript.

1voto

Douglas Points 10417

Utilisez oascript pour appeler votre ApplesScript.

$ oascript foobar.applescript

Dans votre plist, votre définition ProgramArguments pour lancer l'application serait la suivante :

ProgramArguments

        osascript
        foobar.applescript

Pour exécuter votre élément, vous avez besoin d'une définition StartInterval qui prend un entier pour le nombre de secondes (1800 pour 30 minutes) entre les exécutions.

StartInterval
1800

Un plist simple mais fonctionnel ressemblerait à ceci :

    Label
    com.user.foobar.app
   ProgramArguments

        osascript
        foobar.applescript

    StartInterval
    1800

0 votes

Il semble que cela ne fonctionne pas, j'utilise un fichier .scpt. Pouvez-vous m'aider avec un fichier .plist complet?

0 votes

Voir cette réponse pour les détails sur l'écriture du fichier plist

0 votes

Oui merci mais je veux qu'il s'exécute toutes les heures et non à un horaire ou jour spécifique. J'ai donc besoin d'aide à ce sujet.

0voto

Oskar Points 1242

Apple documente tout ce dont vous avez besoin pour écrire un fichier XML artisanal à enregistrer sur le système de fichiers et ensuite le charger en utilisant launchtl load /chemin/vers/xml mais la documentation est très dense, elle suppose que vous avez plusieurs jours ou semaines d'expérience et du temps pour apprendre.

Je recommande de commencer avec un outil comme LaunchControl ou Lingon pour faciliter votre courbe d'apprentissage et ajouter une interface agréable pour choisir des horaires comme 30 minutes pour l'intervalle de répétition au lieu de devoir coder 1800 secondes dans le fichier xml.

Voici ce que vous entreriez pour vos 30 minutes et pour exécuter uniquement lorsque l'utilisateur est connecté dans l'application LaunchControl

entrer la description de l'image ici

Encore une fois, vous pouvez le faire manuellement, en abordant chaque obstacle auquel vous serez confronté (débogage des erreurs sur la sortie standard et l'erreur standard lorsque les choses ne fonctionnent pas, débogage des autorisations et emplacements de dossier/fichier) mais c'est généralement une question trop générale ici pour aider quelqu'un à passer d'une idée à une implémentation fonctionnelle.

Je choisirais les outils faciles à moins que vous n'ayez envie de maîtriser plusieurs outils de script et le système de contrôle et de démon de lancement sous-jacent.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X