在my RHEL box上,服务默认启动时为root.如果我没记错的话,其他使用/etc/init.d中init脚本的Linux发行版也是如此.

你认为让进程作为我 Select 的(静态)用户运行的最佳方式是什么?

我找到的唯一方法是使用以下方法:

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

但这看起来有点乱...

是否隐藏了一些魔力,提供了一种简单的机制,可以像其他非root用户一样自动启动服务?

EDIT:我应该说,我在这个例子中开始的过程要么是Python脚本,要么是Java程序.我不想在它们周围写一个原生包装,所以不幸的是,我不能像Black建议的那样调用setuid().

推荐答案

在Debian上,我们使用start-stop-daemon实用程序,它处理pid文件、更改用户、将守护进程置于后台等等.

我不熟悉RedHat,但是你已经在使用的daemon实用程序(在/etc/init.d/functions中定义,顺便说一句)到处都提到它相当于start-stop-daemon,所以它也可以更改你程序的uid,或者你的操作方式已经是正确的.

如果你环顾网络,有几种现成的包装,你可以使用.有些甚至可能已经包装在RedHat中.例如,看一看daemonize.

Linux相关问答推荐

Linux内核中维护进程无关寄存器失败

在PowerShell for Linux上,打印出的maven命令还有其他字符

在linux中,我想将昨天的文件与今天的文件进行比较,仅将今天的更改作为输出,忽略一些字段

如何正确Forking 并完成进程以避免 EAGAIN 错误

Bash shell 脚本未通过 TRUE 条件

/proc/mounts 没有像 /proc/self/mountinfo 这样的源信息

如何从核心转储中获取线程名称?

将 Visual Studio C++ 项目迁移到 Linux 和 CMake

使用 AWK 过滤 Linux 输出

从 bash shell 等效项在fish shell 上设置 $ANDROID_SDK_ROOT

Linux time 命令输出中 real、user 和 sys 的含义

argv的编码是什么?

如何使用完整路径或文件名显示 grep 结果

从 shell 将多个 .sql 转储文件导入 mysql 数据库

如何克隆 OpenLDAP 数据库

如何在 Ubuntu 12.04 中更改 Jenkins 安装的端口号

PHP exec - 判断是否启用或禁用

如何在 IE 中使用 Linux 进行测试

Linux控制台中的模糊文件搜索

在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab