Creé un script en /etc/init.d/ que tiene que ejecutar varios otros scripts de otros usuarios (sin privilegios de root) desde sus directorios de inicio, como si los hubieran iniciado.
Lanzo estos scripts con: sudo -b -u <username> <script_of_a_particular_user>
Y funciona. Pero por cada script de usuario que continúa ejecutándose (por ejemplo, algún perro guardián) veo un proceso de sudo padre correspondiente, aún vivo y ejecutándose como root. Esto crea un desastre en la lista de procesos activos.
Entonces mi pregunta es: ¿cómo puedo iniciar (bifurcar) otro script desde el script bash existente como otro usuario y dejarlo como un proceso huérfano (independiente)?
Explicación más detallada:
Básicamente estoy tratando de proporcionar a otros usuarios en la máquina un medio para ejecutar cosas al iniciar o apagar el sistema ejecutando archivos ejecutables que se encuentran en los respectivos subdirectorios que se encuentran en su directorio de inicio, llamados .startUp y .shutDown. Como no encontré ningún otro medio para hacerlo, escribí mi script bash que hace exactamente eso y lo configuré como un script de servicio (siguiendo el ejemplo de esqueleto) en /etc/init.d/, así que cuando se ejecuta con el argumento de inicio, inicia todo desde los directorios .startUp y cuando se ejecuta con el argumento de detención, inicia todo desde los directorios .shutDown de todos los usuarios como ellos.
Alternativamente, también estoy interesado si podría haber utilizado alguna solución existente para resolver este problema.
ACTUALIZACIÓN
He buscado un poco y encontré esta pregunta:
/unix/22478/detach-a-daemon-using-sudo
Respuesta aceptada allí, para usar:, sudo -u user sh -c "daemon & disown %1"
funciona para mí. Pero también lo intenté sin disown% 1 y es lo mismo. Entonces esto es lo que funciona para mí como esperaba:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
Mi pregunta adicional ahora es, ¿por qué funciona sin rechazo? ¿Debería dejar la llamada desconocida , independientemente de algún posible caso especial?
ACTUALIZACIÓN 2
Aparentemente esto también funciona:
su <username> -c "<script_of_a_particular_user> &"
¿Hay alguna diferencia entre esta llamada y la llamada sudo? Sé que esta es potencialmente una pregunta completamente diferente. Pero dado que estoy encontrando las respuestas aquí, tal vez por el tema, alguien podría aclarar esto aquí.
ACTUALIZACIÓN 3
Ambos métodos con su o sudo ahora producen un nuevo proceso startpar (proceso único que se ejecuta como raíz) después de iniciar la máquina. Visible en la lista de procesos como:
startpar -f -- <name_of_my_init.d_script>
¿Por qué se genera este proceso? Obviamente estoy haciendo algo mal ya que ningún otro script init.d tiene este proceso ejecutándose.
ACTUALIZACIÓN 4
El problema con startpar está resuelto. He comenzado otra pregunta para eso: el
proceso startpar se quedó colgado al iniciar procesos desde rc.local o init.d
Y otra pregunta para analizar más a fondo los mecanismos de lanzamiento para usuarios no privilegiados:
proporcionar a los usuarios normales (no root) capacidades de ejecución automática de inicialización y apagado