2012-07-30 14 views
6

Próbuję odświeżyć komendę i uruchomić ją jako inny użytkownik, ale za każdym razem, gdy to robię, tworzone są dwa procesy.Jak uruchomić nohup jako inny użytkownik bez uruchamiania dwóch procesów?

Na przykład:

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

To zdecydowanie prowadzi my_command jak nikt, ale jest dodatkowy proces, który nie chce się pokazać:

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

A gdybym zabić proces korzeniowy , proces nikogo wciąż trwa ... ale czy istnieje sposób, aby w ogóle nie uruchamiać procesu rootowania? Odkąd uzyskanie identyfikatora my_command i zabicie go jest nieco bardziej skomplikowane.

Odpowiedz

2

Możesz zrobić najlepiej, aby utworzyć mały skrypt w np. /usr/local/bin/start_my_command tak:

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

Zastosowanie chown i chmod aby ustawić go jako plik wykonywalny i własność nobody, to wystarczy uruchomić 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

jaka jest 'runuser' bit? –

+0

zrobić "man runuser". nie jest to argument nohup, lecz jego własne oddzielne polecenie bardzo podobne do su – Rooster

8

Można to osiągnąć jak:

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

i napisać pid 'my_command' w 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

Jeśli użytkownik z nologin skorupkach, prowadzony w sposób następujący :

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

Lub:

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

Lub:

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 &" 
Powiązane problemy