Як перевірити доступ до іншого користувача та змінити відкриті файли?


18

У мене процес працює як користувач-редуктор, і я хочу змінити, open filesщоб уникнути цієї неприємної помилки:

ПОМИЛКА 2014-09-12 17: 49: 14.000000 [головна] прийняти (Забагато відкритих файлів) -> libgearman-server / gearmand.cc: 788

Як я можу запустити ulimit як інший користувач на Ubuntu та змінити відкриті файли? На даний момент я не входжу в якості передач, але в мене є кореневий доступ. Я спробував це зробити:

su gearman --shell /bin/bash --command "ulimit -n"

як тут рекомендовано, але нічого не виходить:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$

Відповіді:


25

Переглянувши це лише тому, що я натрапив на нього під час пошуку в Google і виявив , що коментар Тоні є корисним: хоча це правда, що обмеження розміщуються на рівні процесу, таким чином ви б визначали обмеження, встановлені для конкретного користувача. знайти процеси, які вони розпочали, а потім перевірити proc/${id}/limits.

Конкретно:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID

2
Це має бути прийнятою відповіддю, використовуючи її для з'ясування поточної можливості для користувача redis на Debian.
Тхолу

6

Коли ви запускаєте ulimitкоманду, вона впливає лише на запущений процес ulimit(оболонку) та всі підпроцеси. Отже, коли ви запускаєте bash --command "ulimit -n", це впливає лише на кількість відкритих файлів для цього примірника bash, тоді bash виходить, таким чином майбутні процеси не впливають.

Отже, щоб виконати те, що ви хочете (збільшити ліміт відкритого файлу для вашого реального процесу), можливо, має більше сенсу редагувати, limits.confщоб збільшити ліміт відкритого файлу для вашого конкретного користувача-ремісника.

Дивіться приклади limit.conf в іншому місці чи тут .


Це теж я знайшов, але я хотів би мати можливість перевірити, чи "це набрало чинності". У мене більше не виникає проблеми, з якою у мене виникли, я впевнений, що це сталося
Тоні,

10
Ось як ви перевіряєте more /proc/<proc_id>/limits ... можливо, варто додати відповідь
Тоні,

5
Варто згадати також розташування limit.conf:/etc/security/limits.conf
UpTheCreek

1

Спробуйте використовувати su - <USERNAME> -c ulimit' -Hn'. Я щойно тестував його на CEntOS 7, і він працює.


1
Це не спрацює, якщо <USERNAME>не вдається увійти (має оболонку nologin).
dr01
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.