/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
是将启动可执行文件的目标用户