Назад | Перейти на главную страницу

Прерывистый сбой sudo - SuSE 10

У нас есть давняя производственная проблема, когда cron на определенных серверах периодически сообщает следующую ошибку:

sudo: uid NNN does not exist in the passwd file!

Пользователь действительно существует, на самом деле это идентификатор пользователя cron. В crontab этого пользователя 7 заданий в формате

* * * * * sudo /run/this/every_minute
0,5,10,15,20,25,30,35,40,45,50,55 * * * * sudo /run/this/every_5mins
10,40 * * * * sudo /run/this/every_30mins
...
0 11 * * 6 sudo /run/this/once_per_week

Задание every_5mins иногда изменяет / etc / passwd, но атомарно. Он никогда не касается соответствующего идентификатора пользователя, и когда я сравниваю журналы наших изменений / etc / passwd и время получения этой ошибки, корреляции нет.

Я просмотрел код sudo для используемой версии (1.6.8p12), и эта ошибка возникает из-за системного вызова C getpwnam, возвращающего нулевой указатель на структуру passwd. Помимо очевидной причины, он также может выйти из строя из-за EINTR, EIO, EMFILE, ENFILE или ENOMEM. sudo не делает различий между не найденным именем пользователя и другими условиями ошибки. Я думаю, что могу предположить, что cron изолирует от EIO и EINTR. Наши серверы находятся под наблюдением, и кажется, что у них много памяти. Максимальный предел FD очень высок (> 700k). Нам не известно о каких-либо проблемах с пропускной способностью, и я думаю, что другие вещи не работают, если эти ограничения будут нарушены. Остается EMFILE, но я не понимаю, как это могло вызвать такую ​​ошибку, поскольку это происходит в самом начале, до запуска команды. Я считаю, что EMFILE может возникнуть только в том случае, если максимальный FD (1024) достигнут в конкретном процессе.

Так что я в тупике - любые идеи приветствуются.