.sh regelmäßig durch launchd ausführen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • .sh regelmäßig durch launchd ausführen

    hallo,

    wie der Titel schon sagt.
    ich habe ein script dass ich alle 2 Stunden ausführen lassen will.
    das Script funktioniert wenn ich es im Terminal ausführe.

    leider wird es durch launchd nicht ausgeführt, es gibt auch keine Fehlermeldung.

    ich habe jetzt mal alles auf ein minimum runtergestript, aber selbst ein ganz kleines test-script funktioniert nicht

    das script time.sh

    Quellcode

    1. testDatei="timetest.txt"
    2. echo `date` > "$testDatei"


    launchd-Konfigurationsdatei timeTest.plist

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST
    3. 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    4. <plist version="1.0">
    5. <dict>
    6. <key>Label</key>
    7. <string>timeTest alle 1 Minute</string>
    8. <key>ProgramArguments</key>
    9. <array>
    10. <string>/Users/hape42/Desktop/AppStore/timeTest.sh</string>
    11. </array>
    12. <key>RunAtLoad</key>
    13. <true/>
    14. <key>StartInterval</key>
    15. <integer>60</integer>
    16. </dict>
    17. </plist>
    Alles anzeigen
    im Terminal lade ich es mit
    launchctl load ~/Library/LaunchAgents/timeTest.plist

    ich prüfe auch ob es überhaupt geladen ist mit: launchctl list

    wenn ich time.sh im Terminal aufrufe wird date in die Datei geschrieben. Also funktioniert das Script und an Rechten sollte es nicht liegen
    hat jemand eine Idee was ich falsch mache?
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • hape42 schrieb:

    wenn ich time.sh im Terminal aufrufe wird date in die Datei geschrieben. Also funktioniert das Script und an Rechten sollte es nicht liegen
    Da bin ich nicht so sicher: Es mag sein, dass ich komplett falsch liege, aber vielleicht stolperst Du über das inzwischen stark erweiterte Sandboxing, das auch Sub-Prozesse von launchd trifft. Hier findet sich eine entsprechende Diskussion bei Apple, die dort genannte Catalina Release Notes bestätigen das.

    Vielleicht muss Du Deinem Script in den Sicherheits-Einstellungen Zugriffsrechte auf das File-System (full-disk access oder documents) einräumen?

    Mattes

    P.S.: Solltest Du für's Testen im Script nicht eher einen absoluten Pfad verwenden? Du wechselst ja nicht das aktuelle Verweichnis und könntest so in einer unerwarteten Stelle schreiben wollen...
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Anderer Lösungsansatz: Erstelle eine "Kalendererinnerung" in Automator und füge der die Aktion "AppleScript ausführen" hinzu. Dann mache in einem AppleScript das, was eigentlich Dein Shell-Script leisten sollte.

    Kleines Beispiel für das Schreiben in eine Testdatei:

    Quellcode

    1. on run {input, parameters}
    2. set myFile to open for access ("/Users/matthias/Desktop/test.txt") with write permission
    3. write "hello world" to myFile
    4. close access myFile
    5. return input
    6. end run
    Beim Speichern im Automator gibst Du der Erinnerung einen Namen, anpassen kannst Du sie dann im Kalender.

    Du kannst auch Dein Script direkt durch Kalender ausführen lassen, die Option ist etwas versteckt: Kalendereintrag - "Hinweis" - "Eigene ..." - "Datei öffnen...". Ich dachte schon, diese Option wäre im Zuge von "iOS-Angleichungen" weggefallen :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • danke für die Tips

    hab alles um die absoluten Pfade erweitert

    Shebang steht jetzt auch da <X

    ich hab in der Konsole gefunden:
    Jan 14 11:25:06 42 com.apple.xpc.launchd[1] (timeTest alle 1 Minute[1781]): Service exited with abnormal code: 127


    $ /bin/launchctl error 127
    $ 127: The specified service did not ship with the operating system

    jetzt weiss ich immer noch nicht weiter...

    dabei wollte ich nur einen kleinen test machen , das richtige Projekt kommt erst noch
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • MyMattes schrieb:

    Anderer Lösungsansatz: Erstelle eine "Kalendererinnerung" in Automator und füge der die Aktion "AppleScript ausführen" hinzu. Dann mache in einem AppleScript das, was eigentlich Dein Shell-Script leisten sollte.
    auch eine gute Idee

    mein sh-script ist recht komplex, ich hoffe das ist einfach in AppleScript zu "Portieren"
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • hape42 schrieb:

    mein sh-script ist recht komplex, ich hoffe das ist einfach in AppleScript zu "Portieren"
    Oder versuche erst einmal den zuletzt genannten Weg, das Shell-Script als Kalender-Hinweis auszuwählen...

    Edit: Hierzu muss dass Script die Erweiterung .command bekommen, sonst wird nur z. B. Xcode zum Anzeigen gestartet. Ausserdem erhält man ohne Signierung einen Fehler bei der Ausführung ... hier habe ich aufgehört, weiterzuforschen. Einfach ist anders :)

    Bildschirmfoto 2021-01-14 um 15.04.18.png

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • Der Tip von Mattes brachte dann die Lösung, es hat dann doch mit Zugriffsrechten zu tun:
    developer.apple.com/forums/thread/127403

    hab jetzt alles in "/Library/Application Support" in ein Unterverzeichnis gestellt.
    Jetzt funktioniert das kleine test-script wie es soll. Eine wahrlich schwere Geburt. für "eben mal schnell einen test machen bevor ich mit dem eigentlichen Projekt los lege "

    Vielen Dank für die Hilfe!

    Vielleicht hilft der Thread ja mal jemand der vor ähnlichen Problemen steht.
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42