uruchomiono format plist do uruchamiania polecenia o określonej godzinie w dzień powszedni

4

Staram się uruchamiać polecenie o 10 minutach po drugiej w każdy dzień tygodnia. launchd .plistJak mogę to określić w moim pliku?

Nie chcę, aby działał co 2 godziny i 10 minut, tylko raz w każdy dzień roboczy o określonej godzinie.

Andrzej
źródło

Odpowiedzi:

9

Istnieje kilka zastrzeżeń dotyczących tworzenia uruchomionych plików .plist. Podsumuję je poniżej:

  1. Każdy dzień tygodnia musi być wpisem określonym we wpisie we wpisie słownika StartCalendarInterval .
  2. Dni powszednie zaczynają się od 1 do 5. Niedziela to 0 i 7 (wiem, prawda?)
  3. Musisz wiedzieć, jak chcesz uruchomić swój przedmiot i umieścić go .plistw odpowiednich katalogach / folderach:
    1. ~/Library/LaunchAgents- Specyficzne dla użytkownika. Uruchomi się, gdy użytkownik będzie zalogowany.
    2. /Library/LaunchAgents- Specyficzny dla wszystkich użytkowników. Uruchomi się, gdy użytkownik (użytkownicy) jest zalogowany.
    3. /Library/LaunchDaemons- Działa niezależnie od tego, czy użytkownik (użytkownicy) jest (są) zalogowani. Musisz użyć, sudoaby załadować.plist

Moje preferencje to # 3 (ładuj jako LaunchDaemon), więc mój skrypt zostanie wykonany niezależnie od tego, czy jestem zalogowany, czy nie. Podczas używania jako LaunchDameon należy użyć sudodo załadowania .plist:

sudo lauchctl load com.user.fileCleanup.plist

Uwaga: Jeśli chodzi o konwencję nazewnictwa w moim przykładzie, lubię ją używać. com.user.< name of my script >.plist Pomaga mi to w identyfikowaniu i debugowaniu wszelkich problemów, jeśli się pojawią, i pozostaje w zgodzie z konwencją nazewnictwa Apple z com.apple.some-app.plist To jest całkowicie opcjonalne z twojej strony.

Poniżej znajduje się skrypt, którego używam do czyszczenia plików roboczych (zmodyfikowałem go pod kątem określonych parametrów czasu). Można edytować ten plik swoim ulubionym edytorze tekstowym (używam Komodo Edit ), lecz TextEdit lub nawet nanolub viz linii poleceń będą działać.


<?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>

Materiał bonusowy ....

Ta następna część jest opcjonalna ...

Aby uzyskać informacje zwrotne na temat wykonania moich skryptów i rezultatu, stworzyłem małą funkcję AppleScript, która wywołuje display notification(jest dość prosta jak na moje potrzeby, ale oczywiście można ją poprawić).

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

W moim skrypcie sprawdzam powodzenie lub niepowodzenie, w zależności od tego, co to jest (tj. Plik istniejący w określonym katalogu), wygeneruje powiadomienie. Jeśli nie, kolejne powiadomienie, ale tym razem z dźwiękiem!

#!/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

Oto przykładowy wynik:

wprowadź opis zdjęcia tutaj

Allan
źródło
1
w niedzielę bycie 0 i 7 jest właściwie sprytne. tydzień to 0-6 w kulturach, które rozpoczynają tydzień w niedzielę, 1-7 w kulturach, które rozpoczynają tydzień w poniedziałek.
2

Oto przykładowy plik .plist na pokrycie wykonywania o 2:10 rano każdego dnia tygodnia.

<?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>

Jeśli nie chcesz ręcznie pisać pliku launchd .plist , program taki jak Lingon X może być bardzo pomocny, ponieważ ułatwi również ładowanie / rozładowywanie pliku .plist .

użytkownik3439894
źródło
2

Potrzebne polecenie to Uruchom CalendarInterval

Najłatwiej użyć programu podobnego LaunchControl lub Lingon napisać i załadować plist.

Ten przykład uruchamia / usr / bin / env w dowolnym momencie. Nie ma skrótu dla wszystkich dni tygodnia, więc musisz wymienić dni, w których niedziela to 0. Pokazałem przykład poniedziałku i wtorku

<?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>
znak
źródło