如何使用 numactl 运行服务

Bob*_*Bob 4 linux ubuntu database numa mongodb

我需要做这样的事情来运行 MongoDB

$numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf &
Run Code Online (Sandbox Code Playgroud)

我应该更改什么才能使用上述选项运行 mongo 守护程序?

Jde*_*eBP 6

这取决于您如何管理您的服务。

使用 daemontools-family 服务管理器,仅此而已。

您当前的run程序本质上将归结为

#!/bin/nosh
目录 /
setuidgid mongodb
蒙哥

这实际上run我的 nosh 套件的常规服务包中非常基本的 MongoDB程序,它不使用 shell 作为脚本解释器。rundaemontools 管理服务的shell 解释脚本,例如contegixYoshiaki Kawazu 使用的服务可能看起来更复杂,但最终都会在某处有一个exec setuidgid mongodb mongod命令,即使它隐藏在 shell 变量扩展后面。

使用 daemontools-family 服务管理器,run诸如此类的程序本质上是简单的链式加载命令序列。该numactl程序也是一个链式加载命令,它修改自己进程的设置,然后链接到一个在其命令行上命名的程序。它适用于 daemontools 工具,例如setuidgid.

所以你只需添加numactl到那里的链中,这将是

#!/bin/nosh
目录 /
numactl --interleave=all --
setuidgid mongodb
蒙哥
在 nosh 脚本中或
执行\
numactl --interleave=all -- \
setuidgid mongodb \
蒙哥
在 shell 脚本中。(在 shell 脚本中,您可以让脚本尝试自动检测numactl.

然后用(nosh only)重启服务

系统控制 condrestart mongod.service
或与

svc -t /service/mongodb
如果您使用旧的常规 daemontools/service目录。

使用 systemd,仅此而已。

在你的mongod.service单元文件中会有一个部分

[服务]
用户=mongodb
ExecStart=/usr/local/bin/mongod $OPTIONS 运行

这就是您将在mongodb 随附的 systemd 服务单元中找到的内容,它稍微复杂一点,但并不复杂。

所以你只要按照你的建议做并修改ExecStart设置:

ExecStart=/usr/bin/numactl --interleave=all -- /usr/local/bin/mongod $OPTIONS 运行

要么将其放在替换/etc/systemd/service/mongod.service单元文件中以完全覆盖包提供的单元文件,要么保留包提供的单元文件并仅对 (say) 中的该设置使用覆盖/etc/systemd/service/mongod.service.d/numactl.conf

然后只需从文件中重新加载服务单元

systemctl 守护进程重新加载
并重新启动服务

systemctl condrestart mongod.service

有了暴发户,什么都没有。

AskUbuntu上https://askubuntu.com/questions/293468/上的答案现在已经快 2 岁了。在此期间,numactl能力已经被放置包装提供的新贵作业文件

所以你的系统,假设它是最新的,应该已经这样做了,你甚至不应该需要一个

initctl 重启 mongodb

进一步阅读