¿Hay alguna forma de hacer esto?
Básicamente, estoy tratando de ejecutar un script que necesita iniciar un programa.
Poner el script /Library/LaunchDaemons
funciona bien, pero todo se ejecuta como si fuera el usuario raíz. 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 iniciará el programa, presumiblemente porque se está ejecutando como usuario y no con sudo
permisos.
Así que estoy atascado. Inicie sesión como usuario y vaya a una terminal y ejecute:
sudo my_command_which_launches_a_program
Funciona absolutamente bien, y exactamente como debe funcionar. Así que básicamente quiero emular eso, pero en un script Launchd, si es posible.
Gracias
Pones el plist en /Library/LaunchDaemons pero lo editas para decir con qué usuario se ejecutará el script
La clave que necesita agregar es UserName. Por ejemplo, ejecuto un servidor de noticias como usuario _news
<key>UserName</key>
<string>_news</string>
Documentado en la página man de launchd de Apple
UserName
. Se ejecutan sin iniciar sesión en un usuario.sudo launchctl .....
para que su nombre de usuario sea utilizado por launchtl. Esto está documentado en la página del 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.
launchd
siempre se ejecuta como root. La página de manual solo cubre esto para sistemas que no son macOS.necesita ejecutarse como si fuera un usuario real, pero usando el comando sudo
Creo que esto desmiente una falsa suposición que estás haciendo. Cuando un usuario ejecuta sudo foobar
, el foobar
comando lo ejecuta el root
usuario.
Las únicas cosas que pueden ser diferentes cuando se ejecuta foobar
como root (en lugar de que el usuario ejecute sudo foobar
) son las variables de shell y de entorno disponibles, como $HOME
o $PATH
.
Si su aplicación requiere una variable de entorno o shell específica, simplemente asegúrese de que el LaunchDaemon que está creando establezca esa variable de entorno o shell . Eso le ahorrará muchos dolores de cabeza al tratar de launchd
replicar la experiencia exacta de un usuario específico que ejecuta sudo foobar
.
Para aquellos que votan negativamente , esta información se respalda varias veces en StackExchange aquí , aquí y aquí para empezar.
mmmmmm
Thomas Clayson