La création de fichiers .plist pour launchd présente quelques inconvénients. Je les résume ci-dessous :
- 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.
- Les jours de la semaine vont de 1 à 5. Le dimanche va de 0 à 7 (je sais, n'est-ce pas ?)
- Vous devez savoir comment vous voulez que votre article fonctionne et placer les
.plist
dans les répertoires/dossiers appropriés :
-
~/Library/LaunchAgents
- Spécifique à l'utilisateur. S'exécute lorsque l'utilisateur est connecté.
-
/Library/LaunchAgents
- Spécifique à tous les utilisateurs. S'exécute lorsque l'utilisateur est connecté.
-
/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]()