Der Start des Agenten, der das Python-Skript aufruft, gibt einen Berechtigungsfehler zurück

Ich versuche, Folgendes zu verwenden .plist, um ein Python-Skript aufzurufen.

<?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>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>com.apple.inMemTask14</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/open/Library/Containers/.heheOSX/MacOSHighSierra.py</string>
        </array>
        <key>StartInterval</key>
        <integer>300</integer>  
    </dict>
</plist>

Aus irgendeinem Grund, wenn ich ausführe:

launchctl load -w /Users/open/Library/LaunchAgents/com.apple.inMemTask14.plist

Ich erhalte die folgenden Fehler in meinem system.log:

Mar 27 11:39:19 openZ-MacBook-Pro com.apple.xpc.launchd[1] (com.apple.inMemTask14): This service is defined to be constantly running and is inherently inefficient.
Mar 27 11:39:19 openZ-MacBook-Pro com.apple.xpc.launchd[1] (com.apple.inMemTask14[1335]): Could not find and/or execute program specified by service: 13: Permission denied: /Users/open/Library/Containers/.heheOSX/MacOSHighSierra.py
Mar 27 11:39:19 openZ-MacBook-Pro com.apple.xpc.launchd[1] (com.apple.inMemTask14[1335]): Service setup event to handle failure and will not launch until it fires.

Ich habe dem Python-Skript die Ausführungsberechtigung erteilt. Stimmt etwas mit meinem nicht .plist? Wie kann ich die in den Protokollen angezeigten Fehler beheben?

Antworten (1)

Sie haben einen Fehler und einen kleineren in Ihrer Plist und wahrscheinlich eine Inkonsistenz in Ihrem Dateisystem:

Einen Job unter allen Umständen am Leben zu erhalten und alle 5 Minuten denselben Job zu beginnen, ist wie gezwungen zu sein, im Badezimmer zu bleiben und alle fünf Minuten auf die Toilette zu gehen, wegen … einer Ablutomanie .

Also Teil entfernen:

    <key>KeepAlive</key>
    <true/>

Fügen Sie den Python-Bin in den Programmargumenten hinzu:

ersetzen:

<key>ProgramArguments</key>
<array>
    <string>/Users/open/Library/Containers/.heheOSX/MacOSHighSierra.py</string>
</array>

mit:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/python</string>
    <string>/Users/open/Library/Containers/.heheOSX/MacOSHighSierra.py</string>
</array>

Wenn Sie einen anderen Python-Behälter bevorzugen (z. B. etwas Gebräu/Python), verwenden Sie stattdessen diesen.

Stellen Sie abschließend sicher, dass der angemeldete Benutzer (dh derjenige, der den Agenten startet) zumindest Lesezugriff auf /Users/open/Library/Containers/.heheOSX/MacOSHighSierra.py hat !


Zum letzten Problem:

Ich verwende den folgenden Alias ​​in meinem .bash_profile, um alle Berechtigungen/ACLs eines Pfads zu erhalten:

alias lspath='(IFS=/; set -f -- $PWD; for arg; do path="${path%/}/$arg"; paths+=("$path"); done; ls -dlaOe@ "${paths[@]}")'

Die Eingabe von lspath nach dem CD-Wechsel in einen Ordner zeigt alle Berechtigungen/ACLs an:

$ cd /Users/user1/Library/Containers/.heheOSX
$ lspath
drwxr-xr-x  39 root   wheel  - 1394 27 Mär 17:44 /
drwxr-xr-x   7 root   admin  -  238  5 Aug  2014 /Users
drwxr-xr-x+ 60 user1  staff  - 2040 26 Mär 23:58 /Users/user1
 0: group:everyone deny delete
drwx------+ 72 user1  staff  - 2448 16 Mär 00:40 /Users/user1/Library
 0: group:everyone deny delete
drwx------  57 user1  staff  - 1938 27 Mär 20:26 /Users/user1/Library/Containers
drwxr-xr-x   2 user1  staff  -   68 27 Mär 20:26 /Users/user1/Library/Containers/.heheOSX

In diesem Beispiel kann kein anderer Benutzer außer user1 (und root ) eine *.py in /Users/user1/Library/Containers/.heheOSX starten/laden, da andere Benutzer weder /Users/user1/Library noch durchlaufen können /Users/user1/Library/Containers aufgrund ihrer restriktiven drwx------ Berechtigungen.