Ci sono alcune avvertenze con la creazione di file launchd .plist. Li riepiloghiamo qui sotto:
- Ogni Weekday deve essere una voce specificata in un posto nella voce del dizionario StartCalendarInterval .
- I giorni della settimana vanno da 1 a 5. La domenica è 0 e 7 (lo so, giusto?)
- Devi sapere come vuoi che il tuo articolo venga eseguito e posizionare il
.plist
nelle directory / cartelle appropriate:
-
~/Library/LaunchAgents
- Specifico per l'utente. Verrà eseguito quando l'utente ha effettuato l'accesso.
-
/Library/LaunchAgents
: specifico per tutti gli utenti. Verrà eseguito quando l'utente è (sono) loggato.
-
/Library/LaunchDaemons
- Esegue indipendentemente se l'utente è (sono) loggato. Deve usare sudo
per caricare .plist
La mia preferenza è # 3 (carica come LaunchDaemon), quindi il mio script verrà eseguito indipendentemente dal fatto che io abbia effettuato l'accesso o meno. Quando utilizzi come LaunchDameon, devi utilizzare sudo
per caricare .plist
:
sudo lauchctl load com.user.fileCleanup.plist
Nota: per quanto riguarda la convenzione di denominazione nel mio esempio, mi piace usare com.user.< name of my script >.plist
Questo mi aiuta a identificare e correggere eventuali problemi che dovessero insorgere e mantenere con la convenzione di denominazione Apple di com.apple.some-app.plist
Questo è completamente opzionale sul tuo parte.
Di seguito c'è uno script che sto usando per ripulire i file di lavoro (l'ho modificato per i tuoi specifici parametri temporali). Puoi modificare questo file con il tuo editor di testo preferito (io uso Komodo Edit ), ma TextEdit o anche nano
o vi
dalla riga di comando funzionerà.
<?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>
Metraggio bonus ....
Questa prossima parte è facoltativa ...
In modo che possa ottenere un feedback che i miei script siano eseguiti e quale sia il risultato, ho creato una piccola funzione AppleScript che richiama display notification
(è abbastanza semplice per le mie esigenze, ma ovviamente potrebbe essere migliorata).
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
All'interno del mio script, cerco il successo o il fallimento, a seconda di cosa sia (cioè un file esistente in una particolare directory), genererà una notifica. In caso contrario, un'altra notifica, ma questa volta con audio!
#!/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
Ecco l'output di esempio: