Назад | Перейти на главную страницу

Попытка получить pid из скрипта, запущенного как su -c

Я пытаюсь получить эти сценарии для работы в среде, где Java-приложение должно запускаться как пользователь foobar независимо от того, запущен ли он как root или foobar.

Итак, это мои модификации init скрипт, который связан с init.d:

RUN_USER=foobar
USER_NAME=$(id --user --name)
START_SCRIPT=/opt/app/scripts/start

ARGS=""

start() {
    if [ "$USER_NAME" != "$RUN_USER" ]; then
        PID=$(su $RUN_USER -c $START_SCRIPT $ARGS > /dev/null 2>&1 & echo $!)
    else
        PID=`$START_SCRIPT $ARGS > /dev/null 2>&1 & echo $!`
    fi
}

И мой /opt/app/scripts/start сценарий выглядит так:

exec java -jar /opt/app/app.jar > /dev/null 2>&1 & echo $!

Чтобы сделать init сценарий работы PID переменная должна быть установлена ​​правильно, но она устанавливается на PID из su команда. Есть несколько вопросов о том, как заставить это работать, но ни одно из решений не работает для меня. Я понимаю, что > /dev/null 2>&1 & echo $! часть моей su команда не работает, но она не работает, когда я меняю ее на > /tmp/foobar либо (файл не записывается), и я не знаю, как заставить его работать. В su команда сама по себе (su foobar -c /opt/app/scripts/start) выведет PID должным образом.

Вы повторили java pid внутри / opt / приложение / скрипты / начало скрипт, который верен, но снова повторяет pid of вс внутри сценария инициализации. Я думаю, вам следует изменить сценарий инициализации следующим образом:

start() {
if [ "$USER_NAME" != "$RUN_USER" ]; then
    PID=$(su $RUN_USER -c "$START_SCRIPT $ARGS")
else
    PID=`$START_SCRIPT $ARGS`
fi
}