2012-07-30 10 views
6

Estoy tratando de nohup un comando y ejecutarlo como un usuario diferente, pero cada vez que hago esto, se generan dos procesos.¿Cómo ejecuto nohup como un usuario diferente sin generar dos procesos?

Por ejemplo:

$ nohup su -s /bin/bash nobody -c "my_command" > outfile.txt & 

Esto definitivamente corre my_command como nadie, pero hay un proceso adicional que no quiero que se muestra arriba:

$ ps -Af 
. 
. 
. 
root ... su -s /bin/bash nobody my_command 
nobody ... my_command 

Y si mato el proceso de raíz , el proceso de nadie aún vive ... pero ¿hay alguna manera de no ejecutar el proceso de raíz en absoluto? Desde que obtener el id de my_command y matarlo es un poco más complicado.

Respuesta

2

Puede que sea mejor crear un pequeño script, p. /usr/local/bin/start_my_command así:

#!/bin/bash 
nohup my_command > outfile.txt & 

Uso chown y chmod para establecer que sea ejecutable y propiedad de nobody, a continuación, basta con ejecutar su nobody -c /usr/local/bin/start_my_command.

2
nohup runuser nobody -c "my_command my_command_args....." </dev/null>> /tmp/mylogfile 2>&1 & 
+0

¿cuál es el 'poco runuser'? –

+0

haz un 'man runuser'. no es un argumento de nohup pero su propio comando por separado se parece mucho a su – Rooster

8

Esto se podría lograr como:

su nobody -c "nohup my_command >/dev/null 2>&1 &" 

y para escribir el pid de 'my_command' en un PidFile:

pidFile=/var/run/myAppName.pid 
touch $pidFile 
chown nobody:nobody $pidFile 
su nobody -c "nohup my_command >/dev/null 2>&1 & echo \$! > '$pidFile'" 
0

Si el usuario con la cáscara nologin, ejecute la siguiente :

su - nobody -s /bin/sh -c "nohup your_command parameter >/dev/null 2>&1 &" 

O:

runuser - nobody -s /bin/sh -c "nohup your_command parameter >/dev/null 2>&1 &" 

O:

sudo su - nobody -s /bin/sh -c "nohup your_command parameter >/dev/null 2>&1 &" 

sudo runuser -u nobody -s /bin/sh -c "nohup your_command parameter >/dev/null 2>&1 &" 
Cuestiones relacionadas