Używając Launchd do wywołania skryptu Pythona?

4

Jako kontynuacja mojego początkowego pytania ...

Rutynowo archiwizowany plik dziennika w OSX?

Próbuję wykonać kopię zapasową pliku dziennika na komputerze z OSX i iPhone'em z jailbreakiem. LaunchD został zalecony jako rozwiązanie, a niektóre wyszukiwania Google później ujawniły LingOn jako narzędzie do użycia.

Wyjście (po wypełnieniu pól) daje mi ten PList:

<?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.ash.MySuperLaunchd</string>
    <key>ProgramArguments</key>
    <array>
        <string>python</string>
        <string>/Users/ash/Desktop/sendemail.py</string>
    </array>
    <key>StartInterval</key>
    <integer>3600</integer>
</dict>
</plist>

Teraz uruchamiając mój skrypt Pythona, wywołując go w terminalu, pomyślnie wyślę wiadomość e-mail do skrzynki odbiorczej z załącznikami, których potrzebuję.

LaunchD po prostu się nie uruchamia i nie jestem pewien dlaczego.

Popiół
źródło
1
Czy zarejestrowałeś swoją plist w launchctl? Gdzie umieściłeś ten plik?
Daniel Beck
Lingon umieszcza plist w / Library / LaunchDaemons /
Ash
Zarejestrowałem się także wsudo launchctl load w- com.ash.MySuperLaunchd
Ash
1
Chyba musisz załadować ścieżkę do pliku, a nie dowolny przypisany identyfikator, przynajmniej strona podręcznika wygląda tak. Ponadto zalecam wykonanie pliku wykonywalnego skryptu, dodanie nagłówka shebang określającego ścieżkę which pythoni wykonanie go bezpośrednio, aby obejść problemy z PATH. Na koniec sprawdź /Applications/Utilities/Console.appkomunikaty o błędach.
Daniel Beck
1
Sprawdziłem podwójnie nagłówek shebang i nie wskazywałem na właściwy katalog. Moja wina podczas kopiowania i wklejania skryptu stworzonego dla systemu Linux. Wszystko teraz działa, tylko nie wiem, jak to powtórzyć na iPhonie.
Ash

Odpowiedzi:

1

Musisz załadować agenta. Albo relogin, albo launchctl load /path/to/file.plist.

RunAtLoadjest domyślnie fałszywe, więc skrypt jest uruchamiany po raz pierwszy StartIntervalpo załadowaniu, w tym przypadku 3600.

Ścieżka w ProgramArgumentsmusi wskazywać stałą lokalizację skryptu, więc prawdopodobnie nie powinno być na niej ~/Desktop/. Skrypt docelowy nie musi być wykonywalny. Ale jak słusznie pokazuje @DanielBeck w komentarzach, sprawdź, czy jesteś w stanie na przykład python /Users/ash/Desktop/sendemail.pyw pierwszej kolejności i czy linia shebang jest poprawna.

Lri
źródło