Как я выполняю сервис с numactl

Это работает на Вас?

insmod modulename.so

4
27.04.2015, 10:51
1 ответ

Это зависит от того, как вы управляете своими службами.

При использовании daemontools-family service manager - только так.

Ваша текущая run программа по сути будет сводиться к

#!/bin/nosh
chdir /
setuidgid mongodb
mongod

Это на самом деле очень базовая run программа MongoDB, которая поставляется в комплекте обычных сервисов my nosh suite, которая не использует shell в качестве интерпретатора сценариев. Интерпретируемые shell'ом run скрипты для управляемых daemontools сервисов, такие как используемый contegix или Yoshiaki Kawazu, могут выглядеть сложнее, но все они в конечном итоге содержат exec setuidgid mongodb mongod команду где-то, даже если она скрыта за расширениями переменных оболочки.

С менеджерами служб семейства daemontools, run программы, подобные этим, по сути, являются простыми последовательностями команд, загружаемых по цепочке. Программа numactl - это тоже команда цепной загрузки, которая изменяет настройки собственного процесса, а затем передает цепь программе, названной в ее командной строке. Она хорошо сочетается с такими инструментами daemontools, как setuidgid.

Так что вы просто добавляете numactl в цепочку, которая будет

#!/bin/nosh
chdir /
numactl --interleave=all --
setuidgid mongodb
mongod
в сценарии nosh или
exec \
numactl --interleave=all -- \
setuidgid mongodb \
mongod
в сценарии shell. (В сценарии оболочки можно сделать так, чтобы сценарий пытался автоматически определить наличие numactl. Просто возьмите механизм из upstart folk, ниже).

Затем просто перезапустите службу с помощью (только для nosh)

system-control condrestart mongod.service
или

svc -t /service/mongodb
если вы используете старую традиционную директорию daemontools /service.

С systemd - только это.

В вашем файле mongod.service unit будет раздел, в котором

[Service]
User=mongodb
ExecStart=/usr/local/bin/mongod $OPTIONS run

Это то, что вы найдете в модуле systemd service, поставляемом с mongodb, который немного, но не намного сложнее.

Итак, вы просто делаете, как вы предложили, и изменяете параметр ExecStart:

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

Либо помещаете это в заменяющий /etc/systemd/service/mongod. service, чтобы полностью перекрыть поставляемый пакетом файл, либо сохраните поставляемый пакетом файл и используйте перекрытие только для этой настройки в /etc/systemd/service/mongod.service.d/numactl.conf.

Затем просто перезагрузите блок службы из файла(ов) с помощью

systemctl daemon-reload
и перезапустите службу с помощью

systemctl condrestart mongod.service

С помощью upstart, вообще ничего.

Ответы на https://askubuntu.com/questions/293468/ на AskUbuntu приближаются к двухлетней давности. Тем временем, возможность numactl была помещена в поставляемый пакетом файл задания upstart.

Так что ваша система, предположим, что она обновлена, уже должна это делать, и вам даже не понадобится

initctl restart mongodb

Further reading

5
27.01.2020, 20:54

Теги

Похожие вопросы