Upstart 作业无法在 /var/run 中创建目录

Upstart 作业无法在 /var/run 中创建目录

/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

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

答案1

正如 Upstart cookbook 中提到的: 笔记所有进程(启动前、停止后等等)都将按照用户指定的方式运行。

因此,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

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

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

相关内容