Почему марионетка не может запустить демон Dropbox?

Я использую Dropbox утилиту/демон командной строки в Ubuntu 11.10, но она не работает с куклой.

Я могу успешно управлять Dropbox вручную:

$ sudo /etc/init.d/dropbox [status/start/stop/status]

Однако, когда я настраиваю Puppet, чтобы убедиться, что Dropbox всегда работает, происходит сбой с этим сообщением в журнале:

(/Stage[main]/Dropbox::Service/Service[dropbox]/ensure) change from stopped to running failed: Could not start Service[dropbox]: Execution of '/etc/init.d/dropbox start' returned 1:  at /etc/puppet/modules/dropbox/manifests/init.pp:8

Вот мой файл манифеста марионетки:

class dropbox {
  include dropbox::service
}

class dropbox::service {
  service { "dropbox":
    ensure => running,
  }
}

Приведенное выше сообщение об ошибке также означает, что команда dropbox «status» не работает для Puppet, потому что я получаю то же сообщение об ошибке («Не удалось запустить»), даже когда Dropbox уже запущен.

есть идеи?


person richardkmiller    schedule 08.02.2012    source источник
comment
Я вижу, что вы также опубликовали это в группе пользователей марионеток, но я попробую. Когда служба Dropbox находится в состоянии running, выполните ps -ef | grep dropbox и посмотрите, что она вернет. Я сталкивался с подобными проблемами в прошлом, и кажется, что puppet не нравится, когда имя daemon (имя, которое отображается в ps -ef) отличается от имени, которое вы указали (например, dropbox). . Это далеко, но вы можете попробовать?   -  person Marvin Pinto    schedule 09.02.2012
comment
Привет, @MarvinPinto, да, я не мог докопаться до сути, поэтому решил проверить и здесь. Вот вывод оператора ps: dropbox 14544 1 10 11:45 ? 00:00:01 /home/dropbox/.dropbox-dist/dropbox   -  person richardkmiller    schedule 09.02.2012
comment
Не могли бы вы попробовать добавить hasstatus =› true в оператор обслуживания? Что выводит статус sudo /etc/init.d/dropbox; эхо $?   -  person kupson    schedule 12.02.2012
comment
Привет @kupson, я попробую добавить hasstatus. Эта команда вернула dropboxd для USER dropbox: running (pid 9823) 0   -  person richardkmiller    schedule 25.02.2012
comment
@richardkmiller Чтобы у скрипта rc.d была рабочая команда состояния - вам обязательно нужно поставить hasstatus =› true в манифесте puppet. То Не могу запустить... ошибка должна исчезнуть.   -  person kupson    schedule 25.02.2012


Ответы (2)


Версии Puppy до 2.7 по умолчанию не используют команду /etc/init.d/service status. Они ищут имя процесса в таблице процессов, поэтому, если имя процесса демона отличается от имени службы, это поведение выдаст вам такие ошибки, как:

 ...Service[dropbox]/ensure) change from stopped to running failed...

при каждом исполнении марионеточного агента. Вы должны проверить, есть ли у этой службы рабочая команда состояния:

 sudo /etc/init.d/dropbox status; echo $?
 # That command should return output with "running" text and return code 0 like:
 dropboxd for USER dropbox: running (pid 9823)
 0

Затем скажите марионетке использовать его вместо собственных (‹2.7) механизмов — поместите «hasstatus => true» в определение службы.

person kupson    schedule 25.02.2012

Чтобы добавить к этому, поскольку это популярный хит Google для «puppet can't start service», у меня была аналогичная проблема в CentOS. Оказывается, моя проблема была связана с sudo: у меня было

Defaults requiretty

в моем файле sudoers. Изменение этого на

Defaults requiretty
Defaults:root !requiretty

Устранила проблему и разрешила моему служебному сценарию (который использовал sudo для запуска демона) работать через puppet.

Надеюсь, это поможет будущим сотрудникам Google!

person shearn89    schedule 10.12.2014