Eu tenho um daemon launchd colocado em ~/Library/LaunchAgents
que funcionou bem no Mavericks. Mas não começará no beta público de Yosemite. O daemon plist é assim (meu nome de usuário é darksair
com o UID 501)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Basicamente, ele deve executar ~/bin/retrmail.py
a cada 5 minutos.
Noto que no Yosemite o launchd é atualizado para o 2.0 e o launchctl tem novos comandos. Eu tentei
sudo launchctl kickstart user/501/org.darksair.retrmail
e disse
Could not find service "org.darksair.retrmail" in domain for uid: 501
Eu também tentei a velha escola
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
e disse
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
O arquivo é de minha propriedade e do grupo de funcionários. Eu tentei as duas permissões 644 e 600 com o mesmo erro.
Alguém sabe como acionar corretamente um daemon launchd em Yosemite?
UPDATE: parece que meu arquivo do agente de lançamento precisa ser de propriedade de root:wheel
. Depois que eu chown, eu tentei
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
e não apresentou nenhum erro. E eu acho que meu deamon está funcionando corretamente. Deixarei essa questão em aberto porque lembro que o documento de lançamento afirma claramente que o arquivo do agente de lançamento pode ser de propriedade do usuário que está executando o daemon.
UPDATE2: não, não estava funcionando corretamente. Ele foi executado apenas uma vez, mas não novamente, como se estivesse descarregado.
UPDATE3: fiz o upgrade para o beta 3 público do Yosemite e mudei meu agente para esse
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Eu recarreguei este agente e acho que agora ele está funcionando corretamente. Ainda deixo essa questão em aberto porque não sei o que há de errado com meu problema anterior.
Em conclusão, o que eu encontrei é que eu tenho que mudar o dono do plist para root:wheel
para poder carregá-lo.