我一直在使用cset来设置运行进程的cpu亲和力。我正在用set和proc手动重新创建内置的“屏蔽”函数,为我的应用程序的特定线程添加一些子集。我有一个bash脚本,它调用cset来创建集合,并将正确的线程移动到正确的集合。它在与sudo一起运行时起作用。
现在我想让另一个用户可以执行这个脚本,他没有sudo的能力。我相信这个用户足够负责cset,但不想打开根的广泛权力。
我认为CAP_SYS_NICE --这是sched_setaffinity所需要的,我只是假设cset必须使用--在脚本上就足够了,但这是行不通的。我尝试将CAP_SYS_NICE扩展到cset程序(它是cset库的瘦python包装器)。没有骰子。cap_to_text在我的cap_sys_nice脚本上的输出是"=cap_ipc_lock,cap_sys_nice,cap_sys_resource+eip“(由于其他原因,它有ipc_lock和sys_resource;我认为只有sys_nice是相关的)。
有什么想法吗?
发布于 2012-06-20 03:05:29
相反,只需给予用户受限的sudo权限就可以只运行该脚本,例如:
bob ALL=(root) NOPASSWD: /usr/local/bin/cset.sh如果希望用户使用其密码进行身份验证,请删除NOPASSWD:。
发布于 2012-06-21 04:43:11
我一直认为cset是一个SuSE工具。我在EL5的RHEL上使用了它,但是在EL6中,C组是处理屏蔽的首选方法。
我可能会选择sudo路径,限制对将用户进程放入屏蔽程序所需的特定命令的访问。
发布于 2012-06-26 15:23:10
虽然cgroup似乎取代了cset/cpusets (正如ewwhite所说),但我还是继续使用旧方法,因为它更熟悉,而且仍然有效。
对于权限问题,首先通过使用cset在/cpusets中创建一棵树(i sudo chown -R root:myusergroup /cpusets/mytree和sudo chmod -R g+rwX /cpusets/mytree )来解决我的特殊问题。之后,myusergroup中的用户可以通过echo $MYPID >> /cpusets/mytree/subtree/tasks在树中移动进程。不幸的是,cset似乎在没有对所有/cpusets的完全许可的情况下工作--我相信它每次运行命令时都会尝试重新读取整个/cpusets目录--所以我不得不求助于手动移动进程的方法。
我并不是说这是每个人的理想解决方案,但它最适合我的背景和情况。
https://serverfault.com/questions/400349
复制相似问题