Я пытаюсь получить эти сценарии для работы в среде, где 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
}