Tengo un demonio launchd colocado ~/Library/LaunchAgents
que funcionó bien en Mavericks. Pero no comenzará en la versión beta pública de Yosemite. El daemon plist es así (mi nombre de usuario es darksair
con 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>
Básicamente se supone que se ejecuta ~/bin/retrmail.py
cada 5 minutos.
Noté que en Yosemite launchd se actualiza a 2.0, y launchctl tiene nuevos comandos. Lo intenté
sudo launchctl kickstart user/501/org.darksair.retrmail
y dijo
Could not find service "org.darksair.retrmail" in domain for uid: 501
También probé la vieja escuela
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
y dijo
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
El archivo es de mi propiedad y del grupo de personal. Intenté tanto el permiso 644 como el 600 con el mismo error.
Entonces, ¿alguien sabe cómo encender correctamente un demonio de lanzamiento en Yosemite?
ACTUALIZACIÓN: Parece que mi archivo de agente de lanzamiento debe ser propiedad de root:wheel
. Después de que traje, intenté
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
y no emitió ningún error. Y creo que mi demonio está funcionando correctamente. Dejaré esta pregunta abierta porque recuerdo que el documento launchd establece claramente que el archivo del agente de lanzamiento puede ser propiedad del usuario que ejecuta el daemon.
ACTUALIZACIÓN2: No, no se estaba ejecutando correctamente. Se ejecutó solo una vez, pero no nuevamente, como si estuviera descargado.
ACTUALIZACIÓN3: Actualicé a Yosemite public beta 3, y cambié mi agente a esto
<?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>
Recargué este agente y creo que ahora funciona correctamente. Todavía dejo esta pregunta abierta porque no sé qué tiene de malo mi plist anterior.
En conclusión, lo que encontré es que tengo que cambiar el propietario del plist para root:wheel
poder cargarlo.