В следующей конфигурации в /etc/init/foo.conf
в Ubuntu 12.04.4:
description "Foo"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
pre-start script
mkdir -p -m 0775 /var/run/foo
chown foo:foo /var/run/foo
end script
setuid foo
setgid foo
exec /usr/local/bin/foo
Однако, когда это выполняется при загрузке, и когда я пытаюсь запустить его вручную с помощью sudo start foo
, я получаю следующее ошибка в /var/log/upstart/foo.log
:
mkdir: cannot create directory `/var/run/foo': Permission denied
Почему это происходит и как я могу это исправить?
, Поскольку Новомодная поваренная книга упоминает: Примечание , что все процессы (предварительно запускаются, постостановитесь, и так далее) будет выполнен, поскольку пользователь указал.
В результате mkdir
корневой каталог внешнего пользователя перестанет работать с отклоненными результатами разрешения.
Одно решение состоит в том, чтобы создать как корень каталог, chown
это для целевого пользователя и затем выполнить исполняемый файл как пользователя.
description "Foo"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
pre-start script
mkdir -p -m 0775 /var/run/foo
chown foo:foo /var/run/foo
end script
exec sudo -u foo_user /usr/local/bin/foo
, где foo_user
целевой пользователь, который будет инициировать исполняемый файл