我通常会做一个sudo service gunicorn start
来启动gunicorn服务,因此我的应用程序每当需要创建一个文件夹时,所有权属于在运行命令时登录的用户,并且该组属于sudo。我的问题是,为什么当我尝试将服务称为service gunicorn start
时,我收到错误
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.20" (uid=1001 pid=10684 comm="start gunicorn ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init ")
我知道它与权限有关但我无法完全理解这条消息的含义以及如何在没有sudo
的情况下调用该服务。提前谢谢
答案 0 :(得分:1)
Linux服务必须由root用户启动,除非您使用sudo。例如,如果您检查脚本服务:
lgallard@host:~$ ls -l /etc/init.d/* | head
-rwxr-xr-x 1 root root 2243 abr 3 2014 /etc/init.d/acpid
-rwxr-xr-x 1 root root 2014 feb 19 2014 /etc/init.d/anacron
-rwxr-xr-x 1 root root 9974 ene 7 2014 /etc/init.d/apache2
-rwxr-xr-x 1 root root 4596 mar 27 2014 /etc/init.d/apparmor
-rwxr-xr-x 1 root root 2801 oct 30 2014 /etc/init.d/apport
你会发现所有人都属于root。
另一方面,您可以检查gunicorn是否有作为守护程序运行进程的标志,并检查它是否可以与预定义的用户一起运行。但我想最好的方法是使用Linux服务,因此您可以使用sysv-rc-conf或chkconfig等工具在启动时启用或禁用它们。
祝你好运!