新贵工作无法在 /var/run 中创建目录

Dan*_*bbs 5 permissions upstart

/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
Run Code Online (Sandbox Code Playgroud)

但是,当它在启动时运行时,并且当我尝试手动运行它时,sudo start foo我在 中收到以下错误/var/log/upstart/foo.log

mkdir: cannot create directory `/var/run/foo': Permission denied
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

Ste*_*f K 4

正如 Upstart 食谱中提到的: 请注意,所有进程(启动前、停止后等)都将按照用户指定的方式运行。

因此,mkdir外部用户的主目录将失败,并出现权限被拒绝的结果。

一种解决方案是以 root 身份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
Run Code Online (Sandbox Code Playgroud)

foo_user将启动可执行文件的目标用户在哪里

有关如何以不同用户身份运行的参考