Ваш последний комментарий только подтвердил мое подозрение. Я не знаю, как вы попали в эту папку, но это не совсем клон репозитория прошивки.
Следуйте https://github.com/marcelstoer/docker-nodemcu-build#clone-the-nodemcu-firmware-repository , и все будет хорошо.
git clone --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git
На Debian мы используем start-stop-daemon
утилита, которая обрабатывает изодромные с предварением файлы, изменяя пользователя, помещая демона в фон и многое другое.
Я не знаком с Redhat, но daemon
утилита, которую Вы уже используете (который определяется в /etc/init.d/functions
, btw.) упоминается везде как эквивалент start-stop-daemon
, так или это может также изменить uid Вашей программы или способ, которым Вы делаете, это уже - корректное.
Если Вы смотрите по всей сети, существует несколько готовых оберток, которые можно использовать. Некоторые могут даже быть уже упакованы в Redhat. Взгляните на daemonize
, например.
После рассмотрения всех предложений здесь, я обнаружил несколько вещей, которые я надеюсь, будет полезно для других в моем положении:
транзитный участок является правильным указать на меня назад на /etc/init.d/functions
: daemon
функция уже позволяет Вам устанавливать альтернативного пользователя:
daemon --user=my_user my_cmd &>/dev/null &
Это реализовано путем обертывания вызова процесса с runuser
- больше на этом позже.
Jonathan Leffler прав: в Python существует setuid:
import os
os.setuid(501) # UID of my_user is 501
Я все еще не думаю, что Вы можете setuid из JVM, как бы то ни было.
Ни один su
ни runuser
корректно обработайте случай, где Вы просите выполнять команду как пользователь, Вы уже. Например:
[my_user@my_host]$ id
uid=500(my_user) gid=500(my_user) groups=500(my_user)
[my_user@my_host]$ su my_user -c "id"
Password: # don't want to be prompted!
uid=500(my_user) gid=500(my_user) groups=500(my_user)
К обходному решению то поведение su
и runuser
, Я изменил свой init сценарий на что-то как:
if [[ "$USER" == "my_user" ]]
then
daemon my_cmd &>/dev/null &
else
daemon --user=my_user my_cmd &>/dev/null &
fi
Спасибо все для Вашей справки!
Если Вы намереваетесь записать Вашему собственному демону, то я рекомендую назвать setuid (). Таким образом, Ваш процесс может
Некоторые вещи, на которые следует обратить внимание: