问题

在我的RHEL框中,服务默认在启动时作为 root 启动.如果我记得正确,对于使用 /etc/init.d 中的init脚本的其他Linux发行版也是如此.

您认为最好的方法是让流程作为我选择的(静态)用户运行?

我得到的唯一方法是使用像:

 su my_user -c 'daemon my_cmd &>/dev/null &'

但这似乎有点不整洁...

有没有一些魔法卷起,提供了一个容易的机制,自动启动服务作为其他非root用户?

编辑:我应该说,我在这个实例中开始的进程是Python脚本或Java程序.我不想在他们周围写一个本地包装器,所以很遗憾,我无法调用 setuid() 表示为黑色.



解决方法

在Debian上,我们使用 start-stop-daemon 实用程序来处理pid文件,更改用户,将后台程序放入后台等.

我不熟悉RedHat,但是你已经在使用的守护进程实用程序(在 /etc/init.d/functions ,btw中定义). )到处都是等同于 start-stop-daemon ,所以它也可以改变你的程序的uid,或者你的方式已经是正确的.

如果你围着网看,有几个现成的包装,你可以使用.有些甚至可能已经打包在RedHat中.请查看 daemonize ,例如.




相关问题推荐