Вопрос: Как получить PID процесса, запущенного / bin / su -c


Я пишу init.d-скрипт для java-приложения. Но java-приложение должно запускаться другим пользователем.

(Я использую OS, это Debian Squeeze.)

Я уже получил это:

/bin/su - $USER - c "cd $PATH;echo $PASSWORD | $JAVA -Xmx256m -jar $PATH/app.jar -d > /dev/null" & PID=$!
/bin/su - $USER - c "echo $PID > $PIDFILE"

Но это, конечно же, сохранит только pid «/ bin / su» -process вместо pid созданного java-процесса.


5
2018-04-02 21:49


Источник




Ответы:


Echo PID внутри команд, выполняемых «su»:

/bin/su - $USER -c "cd $PATH;echo $PASSWORD | \
  $JAVA -Xmx256m -jar $PATH/app.jar -d > /dev/null & echo $! > $PIDFILE"

3
2018-04-02 22:56



Я пробовал это, но $ PIDFILE просто пуст (за исключением строки) при использовании этой команды. - crash3k
Его пустой, потому что $! оценивается с помощью оболочки su, а не оболочку, которая su пробеги. Если вы измените $! в \$! или изменить двойные кавычки на одиночные кавычки, он должен работать. - Patrick