Bagaimana cara menjalankan daemon plist pada MAC OS 10.8.5 dengan izin file yang benar

0

Saya punya file plist yang disimpan

/Library/LaunchDaemons/local.WiFiDaemon.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>GroupName</key>
        <string>staff</string>
        <key>InitGroups</key>
        <true/>
        <key>Label</key>
        <string>local.job</string>
        <key>ProgramArguments</key>
        <array>
                <string>python</string>
                <string>/Library/Application Support/PythonDaemons/PythonTest.py</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/local.job.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/local.job.out</string>
        <key>UserName</key>
        <string>myuser</string>
</dict>
</plist>

file seharusnya mengeksekusi skrip python yang hanya ping google dan menyimpan hasilnya ke file teks di:

/Library/Application Support/PythonDaemons/Ping_log.txt

masalahnya adalah skrip python memberikan kesalahan yang mengatakan tidak memiliki izin untuk file tersebut. Ketika saya menjalankan skrip dari baris perintah semuanya berfungsi dengan baik tanpa izin khusus yang diperlukan. Apa yang saya lewatkan di sini?

Berikut skrip python:

import subprocess, datetime, time

host = "www.google.com"
ping = subprocess.Popen(
                        ["ping", "-c", "4", host],
                        stdout = subprocess.PIPE,
                        stderr = subprocess.PIPE)
out, error = ping.communicate()
with open('PingOut.txt', 'w') as outFile:
    outFile.write(out)
temp = out.split('\n')
parsed = temp[len(temp)-2].split('/')
min = parsed[len(parsed)-4].split(' ')[2]
avg = parsed[len(parsed)-3]
max = parsed[len(parsed)-2]

print "min: " + str(min) + "avg: " + str(avg) + "max: " + str(max)

with open('Ping_log.txt', 'a') as f:
 f.write(str(datetime.datetime.now()) + ',' + str(min) + ',' + str(avg) + ',' + str(max))
user2152277
sumber
apa hak akses untuk /Library/Application Support/PythonDaemons/?
heiglandreas
Saya baru saja mengubah izin untuk dwr-wr-wr- dan masih memberikan kesalahan: traceback (most recent call last): File "/Library/Application Support/PythonDaemons/PythonTest.py", line 15, in <module> with open('PingOut.txt', 'w') as outFile: IOError: [Errno 13] Permission denied: 'PingOut.txt'
user2152277
Karena ini adalah folder maka perlu drwxrwxrwx. Kalau tidak, tidak ada yang diizinkan untuk pindah ke folder dan karena itu tidak dapat membuat file.
heiglandreas

Jawaban:

0

Saya mendapat jawabannya melalui stackoverflow, ternyata tanpa mendefinisikan path dalam file python dan hanya memberikan nama file defaultnya untuk membuat file dalam direktori sistem yang saya tidak punya akses. Solusinya adalah: mengatur jalur kerja di python

with open('/Library/Application Support/PythonDaemons/Ping_log.txt', 'a') as f:

atau atur direktori di plist

<key>WorkingDirectory</key>
<string>/Library/Application Support/PythonDaemons</string>

Ini disediakan oleh pengguna Barmar di StackOverflow

user2152277
sumber