Как запустить демон plist в MAC OS 10.8.5 с правильными правами доступа к файлам

375
user2152277

У меня есть файл plist, сохраненный в

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

Предполагается, что файл будет выполнять скрипт Python, который просто пингует Google и сохраняет результаты в текстовый файл в:

/Library/Application Support/PythonDaemons/Ping_log.txt 

проблема в том, что скрипт python выдает ошибку, говоря, что у него нет прав доступа к файлу. Когда я запускаю скрипт из командной строки, все работает нормально, без каких-либо специальных разрешений. Что я здесь пропустил?

Вот скрипт 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)) 
0
Каковы права доступа к `` `/ Библиотека / Поддержка приложений / PythonDaemons /` ``? heiglandreas 9 лет назад 0
Я просто изменил права доступа на dwr-wr-wr- и до сих пор выдаю ошибку: `traceback (последний вызов был последним): Файл" / Библиотека / Поддержка приложений / PythonDaemons / PythonTest.py ", строка 15, в с открытым ('PingOut.txt', 'w') как outFile: IOError: [Errno 13] Отказано в доступе: 'PingOut.txt'` user2152277 9 лет назад 0
Поскольку это папка, она нуждается в drwxrwxrwx. В противном случае никому не разрешено перемещаться в папку и, следовательно, не может создать файл. heiglandreas 9 лет назад 0

1 ответ на вопрос

0
user2152277

Я получил ответ через stackoverflow, очевидно, не определяя путь в файле python и просто предоставляя имена файлов, которые по умолчанию он создает для файлов в системном каталоге, к которому у меня нет доступа. Решения: установить рабочий путь в Python

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

или установите каталог в листе

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

Это было предоставлено пользователем Barmar в StackOverflow

Похожие вопросы