Como executo um daemon plist no MAC OS 10.8.5 com as permissões de arquivo corretas

0

Eu tenho um arquivo plist salvo em

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

o arquivo deve executar um script python que apenas pula o google e salva os resultados em um arquivo de texto em:

/Library/Application Support/PythonDaemons/Ping_log.txt

o problema é o script python dá um erro dizendo que não tem as permissões para o arquivo. Quando executo o script a partir da linha de comando, tudo funciona bem, sem precisar de nenhuma permissão especial. O que eu perdi aqui?

Aqui está o script 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))
    
por user2152277 22.08.2014 / 08:15

1 resposta

0

Eu obtive a resposta via stackoverflow, aparentemente sem definir o caminho no arquivo python e apenas fornecendo os nomes dos arquivos, o padrão é criar os arquivos em um diretório do sistema que eu não tenho acesso. As soluções são: definir o caminho de trabalho em python

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

ou defina o diretório no plist

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

Isso foi fornecido pelo usuário Barmar no StackOverflow

    
por 23.08.2014 / 16:42