Avvio dell'ID processo fuori comando con "su -c"


9

Sto eseguendo un programma Java all'interno di una shell e scrivendo l'id di processo in un file di testo. Quindi quando faccio questo:

nohup java app.Main > /dev/null 2>&1 &
echo $! > /var/run/app.pid

Funziona. Ma voglio davvero eseguirlo come un altro utente

su - appuser -c "nohup java app.Main > /dev/null 2>&1 &"
echo $! > /var/run/app.pid

Questo non funziona Esiste un modo per avviare l'id di processo del comando con l'opzione -c?

Risposte:


8

Tu puoi fare:

su - appuser -c 'nohup java app.Main > /dev/null 2>&1 &
                 echo "$!"' > /var/run/app.pid

(che presuppone che la shell di login appusersia simile a Bourne).

su -reimposta l'ambiente, quindi se si vuole avere variabili espanse nella riga di comando, deve essere fatto dal vostro guscio (non la shell di login dell'utente remoto) come:

su - appuser -c "nohup '$JAVA_BIN' '$JAVA_CLASS' > /dev/null 2>&1 &"'
                 echo "$!"' > /var/run/app.pid

(ciò presuppone che quelle variabili non contengano caratteri di virgoletta singola).

Vuoi che il reindirizzamento sia eseguito dalla tua shell (in esecuzione come root), non dalla appusershell (che probabilmente non ha il permesso di scrivere /var/run).


2
Grazie. Ha funzionato, ma ho dovuto modificarlo un po 'per il mio caso. Per qualche motivo, ho dovuto aggiungere una barra rovesciata prima di $! e poi ho dovuto reindirizzarlo a un file tmp a causa di problemi di autorizzazione. La riga successiva lo leggerebbe dal file tmp e lo metterebbe nella posizione corretta. su - appuser -c "nohup $JAVA_BIN $JAVA_CLASS > /dev/null 2>&1 & echo \$! > /tmp/appid.tmp"
Prasanth,

@Prasanth, vedi la mia modifica.
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.