sudo: нет tty присутствует и не указана программа прохода

У меня есть Perl-скрипт, который я форк из другого скрипта, который я запускаю из веб-браузера через mod_perl. Развернутый скрипт (который заканчивается запуском как apache) нуждается в sudo service X stop качестве части процесса восстановления резервной копии: служба X зависит от восстановления. У меня было это нормально в Windows, но теперь портирование на CentOS я столкнулся с ошибкой в ​​названии.

Настроить:

  1. Файл sudoers прокомментировал # Defaults requiretty
  2. Файл sudoers имеет apache_usr localhost=(root) NOPASSWD: /sbin/service X stop (который проходит проверку visudo -c ) и не имеет других строк apache_usr

Вещи, которые я пробовал:

  1. sudo /sbin/service а не только sudo service в раздвоенном процессе
  2. sudoers файл с комментариями или без комментариев по Defaults !visiblepw
  3. файл sudoers с (ALL) вместо (root) в строке NOPASSWD выше

Что еще можно попробовать?

Короче, так было разработано sudo. См. Здесь .

Он выполняет поиск по-разному, чтобы не отставать, когда у вас нет сетевого подключения / быстрого DNS-сервера.

Если вы машинное имя «соль», то ваша правильная линия sudoers:

apache_usr salt=(root) NOPASSWD: /sbin/service X stop

Другими словами, localhost не является допустимым именем хоста в отношении sudoers.

Вы упомянули, что «файл sudoers закомментировал # Defaults requiretty ».

Это не будет иметь никакого эффекта, если ваша сборка sudo requiretty по умолчанию, что и делает. Используйте целевую спецификацию по умолчанию для соответствующего пользователя:

 Defaults:apache_usr !requiretty 

Когда я пишу ALL=(root) , он работает. Несмотря на то, что сценарий работает на том же сервере, что и служба, которую я пытаюсь остановить. Он доступен в браузере с помощью другого IP-адреса, кроме основного, но, тем не менее, если я запускаю ping -c 1 localhost я получаю 127.0.0.1 поэтому мне действительно интересно узнать, почему это изменение необходимо сделать.