Я использую последнюю версию для Ubuntu 10.4 LTS. upstart запускается с флагом ядра --debug.
Я делаю пользовательскую конфигурацию задания для демона nzbget. По сути, это задание имеет сценарий предварительного запуска, который монтирует файловую систему, сценарий пост-запуска, который монтирует файловую систему, и строку exec nzbget -D
.
Проблема в том, что демон nzbget должен работать как непривилегированный пользователь. Эта функция уже включена в nzbget. Действительно, когда я запускаю из консоли sudo nzbget -D
, процесс запускается как непривилегированный пользователь. Но когда я запускаю задание upstart со строки exec nzbget -D
, процесс nzbget -D запускается от имени пользователя root. Как говорилось в готовой кулинарной книге, я пытался использовать пользователя su -c "nzbget -D", а также start-stop-daemon без ожидаемого строфа, как было рекомендовано. Но для обеих команд, поскольку upstart отслеживает неверный PID, я думаю, он видит основной процесс как завершенный (из-за журналов upstart) в конце процесса запуска и, таким образом, запускает сценарий пост-процесса, который мне не нужен.
=> Как я могу сделать это правильно? Как получается, что команда exec nzbget -D
upstart запускает процесс от имени пользователя root, а команда sudo nzbget -D
запускает его от имени непривилегированного пользователя?
Был достигнут некоторый прогресс в выпуске версии 1.4.:
Новые разделы «setuid» и «setgid», позволяющие запускать системные задания под указанным uid / gid, соответствующим заданному имя / группы.
blockquote>Вы можете получить его со страницы на странице LaunchPad , но (странно), я не вижу PPA, поэтому вам, возможно, придется скомпилировать его самостоятельно.
В противном случае, используйте
su
илиsudo
в вашей команде exec следующим образом:su -c "<commands>" <username> sudo -u <username> <commands>
Они оба делают одно и то же, поэтому выбирайте, что вам больше нравится. Итак, используя ваш пример команды:
exec sudo -u me "nzbget -D"
Я предлагаю использовать sudo со следующим синтаксисом:
sudo -u foouser foocommand
для запуска команды foocommand от имени пользователя foouser.