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.
fuente
Respuestas:
Desde
man launchctl
Fix es
fuente
chmod 644
?Por extraño que parezca, usar
sudo
era su problema. Al usarlosudo
, ya no era usted mismo, por lo que no era el propietario de su propio archivo. Eliminesudo
, repita el comando y debería cargarse bien. Perdón por el enfoque filosófico de todo.fuente
Encontré la solución.
El comando correcto en este caso es
Y para descargar,
Sin
launchctl load
embargo, no sé por qué requiere root, pero la carga / descarga está en desuso de todos modos.fuente
chmod
&chown
?Me encontré con esto también, tratando de usar el usuario, no la raíz .plist (como uno debería poder hacer)
Fui enviado a esta máquina de forma remota mientras NO estaba conectado en la consola (sin cabeza), lo que parecía ser mi problema: al menos los servicios administrados por el usuario necesitan que el usuario haya iniciado sesión en la pantalla principal (terminé haciendo iniciar sesión a través de la administración remota, ya que esta es una máquina sin cabeza)
OMI, si desea que esto se ejecute incluso si no está personalmente allí para iniciar sesión, sus opciones son:
Inicie sesión en su cuenta automáticamente (tenga en cuenta la implicación de seguridad, también sin la etiqueta UserName como se indica en una de las respuestas)
Haga que los archivos pertenezcan a la raíz como se indica en las diversas sugerencias (estableciendo que el usuario vuelva a ser efectivo con el nombre de usuario como ya lo hizo)
fuente
Aquí hay una idea tonta.
Acabo de tener el mismo error, también después de haber actualizado a Yosemite. Asumí erróneamente que significaba una mala propiedad / permisos en el archivo .plist, cuando de hecho, por alguna razón, el binario al que hacía referencia en el plist (en mi caso Cassandra), había perdido su bit ejecutable.
chmod + x'ing lo arregló.
Probablemente no sea tu problema, pero valdría la pena intentarlo :)
fuente
Retire la
UserName
llave y la cuerda.El problema es que la
UserName
clave solo se puede usar si el proceso se inicia desde la raíz. Solo se puede iniciar como root si el plist es propiedad de root. Básicamente, el proceso se inicia por root y luego se suide al usuario especificado. Si desea que este proceso se ejecute como usted mismo, coloque el plist en su carpeta ~ / Library / LaunchAgents y elimine la clave UserName.fuente
¿Intentaba volver a cargar manualmente un agente que tenía permisos de usuario? No entiendo completamente por qué se requiere nada de esto, pero creo que debe estar conectado al dominio de sus usuarios (que parece que no está conectado cuando se ejecuta como root). Usar estas funciones para volver a conectar funcionó para mí.
Usaría esto de la siguiente manera:
Bsexec lo vuelve a colocar en su dominio y le permite agregar la tarea como un iniciador de usuario.
fuente