15 votos

Launchd - Ejecuta como si estuvieras conectado como un usuario usando sudo

¿Hay alguna forma de hacerlo?

Básicamente estoy tratando de ejecutar un script que necesita lanzar un programa.

Poner el script en /Library/LaunchDaemons funciona bien, pero todo se ejecuta como si fuera el usuario Root. Esto no funciona porque necesita ejecutarse como si fuera un usuario real, pero usando el sudo comando.

Así que moví el script a ~/Library/LaunchDaemons pero ahora no lanza el programa, presumiblemente porque se ejecuta como usuario y no con sudo permisos.

Así que estoy atascado. Entrar como el usuario e ir a un terminal y ejecutar:

sudo my_command_which_launches_a_program

Funciona absolutamente bien, y exactamente como se supone que debe funcionar. Así que quiero básicamente emular eso, pero en un Launchd script, si es posible.

Gracias

0 votos

¿Te refieres a poner el script en los directorios mencionados o en el plist de launchd?

0 votos

Ah perdón, me refiero a un plist que ejecuta el script.

14voto

yoliho Puntos 340

Pones el plist en /Library/LaunchDaemons pero lo editas para decir con qué usuario se ejecutará el script

La clave que tienes que añadir es UserName. Por ejemplo, yo ejecuto un servidor de noticias como usuario _news

<key>UserName</key>
<string>_news</string>

Documentado en Página man de launchd de Apple

1 votos

A diferencia de los LaunchAgents, LaunchDeamon no puede utilizar UserName . Se ejecutan sin necesidad de iniciar la sesión de un usuario.

1 votos

@Julian donde se documenta esto - y creo que esto solía trabajar por lo que OS X chnage esto

1 votos

@JulianF.Weinert - sólo ejecútalo como Root. sudo launchctl ..... para que su nombre de usuario sea utilizado por launchtl. Esto está documentado en el página de manual UserName <string> This optional key specifies the user to run the job as. This key is only applicable when launchd is running as root.

3voto

fravelgue Puntos 1119

debe ejecutarse como si fuera un usuario real, pero utilizando el comando sudo

Creo que esto desmiente una falsa suposición que estás haciendo. Cuando un usuario ejecuta sudo foobar entonces el foobar es ejecutado por el comando root usuario.

Las únicas cosas que pueden ser diferentes cuando se ejecuta foobar como Root (en lugar del usuario que ejecuta sudo foobar ) son las variables de shell y de entorno disponibles como $HOME o $PATH .

Si su aplicación requiere un shell o una variable de entorno específica, sólo tiene que asegurarse de que esa shell o variable de entorno está establecida por el LaunchDaemon que está creando . Eso le ahorrará muchos disgustos al tratar de conseguir launchd para replicar la experiencia exacta de un usuario específico que ejecuta sudo foobar .

A los que votan en contra Esta información está respaldada en múltiples ocasiones en StackExchange aquí , aquí y aquí para empezar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X