8 votes

format plist launchd pour l'exécution d'une commande à une heure précise un jour de semaine

J'essaie d'exécuter une commande 10 minutes après 2 heures du matin, tous les jours de la semaine uniquement. Dans mon launchd .plist Comment puis-je le spécifier ?

Je ne veux pas qu'il s'exécute toutes les 2 heures et 10 minutes, mais seulement une fois par jour de semaine à l'heure spécifiée.

15voto

Douglas Points 10417

La création de fichiers .plist pour launchd présente quelques inconvénients. Je les résume ci-dessous :

  1. Chaque jour de la semaine doit être une entrée spécifiée dans une rubrique placée dans la rubrique Intervalle de début de calendrier entrée du dictionnaire.
  2. Les jours de la semaine vont de 1 à 5. Le dimanche va de 0 à 7 (je sais, n'est-ce pas ?)
  3. Vous devez savoir comment vous voulez que votre article fonctionne et placer les .plist dans les répertoires/dossiers appropriés :
    1. ~/Library/LaunchAgents - Spécifique à l'utilisateur. S'exécute lorsque l'utilisateur est connecté.
    2. /Library/LaunchAgents - Spécifique à tous les utilisateurs. S'exécute lorsque l'utilisateur est connecté.
    3. /Library/LaunchDaemons - S'exécute indépendamment du fait que l'utilisateur soit connecté ou non. Doit utiliser sudo pour charger .plist

Ma préférence va au point 3 (chargement en tant que LaunchDaemon) afin que mon script soit exécuté, que je sois connecté ou non. Lors de l'utilisation en tant que LaunchDaemon, vous devez utiliser sudo pour charger le .plist :

sudo lauchctl load com.user.fileCleanup.plist

Note : En ce qui concerne la convention d'appellation dans mon exemple, j'aime utiliser com.user.< name of my script >.plist Cela me permet d'identifier et de déboguer les problèmes éventuels et de respecter la convention de dénomination Apple, à savoir com.apple.some-app.plist Ceci est entièrement facultatif de votre part.

Vous trouverez ci-dessous un script que j'utilise pour nettoyer les fichiers de travail (je l'ai modifié en fonction de vos paramètres temporels spécifiques). Vous pouvez éditer ce fichier avec votre éditeur de texte préféré (j'utilise Komodo Edit ), mais TextEdit ou même nano ou vi à partir de la ligne de commande.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.user.fileCleanup</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/allan/Documents/Scripts/Unix/fileCleanup.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <!--  Weekdays are 1 - 5; Sunday is 0 and 7   -->
    <array>
        <dict>
            <key>Weekday</key>
            <integer>1</integer>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
        </dict>
        <dict>
            <key>Weekday</key>
            <integer>2</integer>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
        </dict>
        <dict>
            <key>Weekday</key>
            <integer>3</integer>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
        </dict>
        <dict>
            <key>Weekday</key>
            <integer>4</integer>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
        </dict>
        <dict>
            <key>Weekday</key>
            <integer>5</integer>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
        </dict>
    </array>

</dict>
</plist>

Bonus Footage....

La partie suivante est facultative...

Afin de savoir si mes scripts ont été exécutés et quel a été le résultat, j'ai créé une petite fonction AppleScript qui invoque la fonction display notification (il est assez simple pour mes besoins, mais pourrait évidemment être amélioré).

on run argv

    set Message to item 1 of argv
    set Title to item 2 of argv
    set aud to item 3 of argv
    set STitle to "Terminal"
    set Snd to "Blow.aiff"

    if (aud = "sound") then

        display notification Message with title Title subtitle STitle sound name Snd
    else
        display notification Message with title Title subtitle STitle
    end if

end run

Dans mon script, je vérifie le succès ou l'échec, en fonction de ce que c'est (c'est-à-dire un fichier existant dans un répertoire particulier), cela génère une notification. Si ce n'est pas le cas, une autre notification, mais cette fois avec du son !

#!/bin/bash
if [ -f "$SOURCE" ]
then
    scp -q "$SOURCE" "$TARGET"
    osascript $ASCRIPT_DIR/notify.scpt "Podcast Transfered successfully" "$TITLE -- SUCCESS" "nosound"
else
    osascript $ASCRIPT_DIR/notify.scpt "The file $TARGET does not exist" "$TITLE -- ERROR" "sound"
fi

Voici l'exemple de sortie :

enter image description here

2voto

user3439894 Points 52496

En voici un exemple .plist pour couvrir l'exécution à 2h10 tous les jours de la semaine.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.me.hello</string>
    <key>ProgramArguments</key>
    <array>
        <string>say</string>
        <string>hello</string>
    </array>
    <key>RunAtLoad</key>
    <false/>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
            <key>Weekday</key>
            <integer>1</integer>
        </dict>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
            <key>Weekday</key>
            <integer>2</integer>
        </dict>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
            <key>Weekday</key>
            <integer>3</integer>
        </dict>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
            <key>Weekday</key>
            <integer>4</integer>
        </dict>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
            <key>Weekday</key>
            <integer>5</integer>
        </dict>
    </array>
</dict>
</plist>

Si vous ne souhaitez pas écrire à la main le launchd .plist un programme comme Lingon X peut s'avérer très utile, car elle facilite le chargement et le déchargement de l'appareil. .plist également.

2voto

yoliho Points 340

La commande dont vous avez besoin est Start CalendarInterval

La méthode la plus simple consiste à utiliser un programme tel que LaunchControl ou Lingon pour écrire et charger la plist.

Cet exemple exécute /usr/bin/env à l'heure souhaitée. Il n'existe pas de raccourci pour tous les jours de la semaine, vous devez donc énumérer les jours où le dimanche est à 0. J'ai indiqué lundi et mardi à titre d'exemple.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.job</string>
    <key>Program</key>
    <string>/usr/bin/env</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
            <key>Weekday</key>
            <integer>1</integer>
        </dict>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>10</integer>
            <key>Weekday</key>
            <integer>2</integer>
        </dict>
    </array>
</dict>
</plist>

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