cherrypy не может остановиться, когда марионетка пытается обеспечить работу и обновить ее одновременно
Я пытаюсь управлять служением вишневого цвета с марионеткой. Тем не менее, когда применяется конфигурация, Cherryd заканчивается без файла PID, хотя процесс запущен и работает. Поскольку файл PID утерян, я больше не могу остановить процесс с помощью /etc/init.d/mycherryd stop
(если я не изменю сценарий инициализации вручную для поиска PID с ps
или что-то.)
$ /etc/init.d/mycherryd status
cherryd dead but subsys locked
Кажется, проблема в том, что puppet пытается обновить / перезапустить cherryd (вызванный изменениями в файлах конфигурации) сразу после того, как он работает (как указано в манифесте), и cherrypy не может остановить и запустить (перезапустить) сам, продолжая при этом выполнять его процесс запуска.
Есть ли четкое решение этой проблемы? Это ошибка на стороне вишни или я могу написать манифест марионетки, чтобы обновление вызывалось только после запуска службы? Любое предложение приветствуется.
бревно вишневое
Посмотрите, как вишня ловит SIGTERM в середине запуска и все еще начинает слушать.
:cherrypy.error[18666] 2010-02-12 13:10:23,551 INFO: ENGINE Listening for SIGHUP.
:cherrypy.error[18666] 2010-02-12 13:10:23,552 INFO: ENGINE Listening for SIGTERM.
:cherrypy.error[18666] 2010-02-12 13:10:23,552 INFO: ENGINE Listening for SIGUSR1.
:cherrypy.error[18666] 2010-02-12 13:10:23,552 INFO: ENGINE Bus STARTING
:cherrypy.error[18671] 2010-02-12 13:10:23,554 INFO: ENGINE Daemonized to PID: 18671
:cherrypy.error[18671] 2010-02-12 13:10:23,554 INFO: ENGINE PID 18671 written to '/var/mycherryd/cherry.pid'.
:cherrypy.error[18671] 2010-02-12 13:10:23,555 INFO: ENGINE Started monitor thread '_TimeoutMonitor'.
:cherrypy.error[18670] 2010-02-12 13:10:23,556 INFO: ENGINE Forking twice.
:cherrypy.error[18666] 2010-02-12 13:10:23,557 INFO: ENGINE Forking once.
:cherrypy.error[18671] 2010-02-12 13:10:23,716 INFO: ENGINE Caught signal SIGTERM.
:cherrypy.error[18671] 2010-02-12 13:10:23,716 INFO: ENGINE Bus STOPPING
:cherrypy.error[18671] 2010-02-12 13:10:23,716 INFO: ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('0.0.0.0', 12380)) already shut down
:cherrypy.error[18671] 2010-02-12 13:10:23,717 INFO: ENGINE Stopped thread '_TimeoutMonitor'.
:cherrypy.error[18671] 2010-02-12 13:10:23,717 INFO: ENGINE Bus STOPPED
:cherrypy.error[18671] 2010-02-12 13:10:23,732 INFO: ENGINE Bus EXITING
:cherrypy.error[18671] 2010-02-12 13:10:23,759 INFO: ENGINE PID file removed: '/var/mycherryd/cherry.pid'.
:cherrypy.error[18671] 2010-02-12 13:10:23,782 INFO: ENGINE Bus EXITED
:cherrypy.error[18671] 2010-02-12 13:10:23,792 INFO: ENGINE Serving on 0.0.0.0:12380
:cherrypy.error[18671] 2010-02-12 13:10:23,826 INFO: ENGINE Bus STARTED
кукольный журнал
Puppet пытается обновить службу сразу после того, как она будет запущена.
Feb 12 13:10:22 localhost puppetd[8159]: (//mycherrypy/File[conffiles]) Scheduling refresh of Service[cherryd]
Feb 12 13:10:22 localhost last message repeated 12 times
Feb 12 13:10:23 localhost puppetd[8159]: (//mycherrypy/Service[mycherryd]/ensure) ensure changed 'stopped' to 'running'
Feb 12 13:10:23 localhost puppetd[8159]: (//mycherrypy/Service[mycherryd]) Triggering 'refresh' from 13 dependencies
Feb 12 13:11:23 localhost puppetd[8159]: (//mycherrypy/Service[mycherryd]) Failed to call refresh on Service[mycherryd]: Could not stop Service[mycherryd]: Execution of '/sbin/service mycherryd stop' returned 1: at /etc/puppet/manifests/mycherrypy.pp:161
Feb 12 13:11:24 localhost puppetd[8159]: Value of 'preferred_serialization_format' (pson) is invalid for report, using default (marshal)
Feb 12 13:11:24 localhost puppetd[8159]: Finished catalog run in 99.25 seconds
отрывок из марионеточного манифеста
class mycherrypy {
file {
'rpm':
path => "/tmp/${apiserver}.i386.rpm",
source => "${fileserver}/${apiserver}.i386.rpm";
'conffiles':
require => Package["${apiserver}"],
path => "${service_home}/config/",
ensure => present,
source => "${fileserver}/config/",
notify => Service["mycherryd"];
}
package {
"$apiserver":
provider => 'rpm',
source => "/tmp/${apiserver}.i386.rpm",
ensure => latest;
}
service {
"mycherryd":
require => [File["conffiles"], Package["${apiserver}"]],
ensure => running,
provider => redhat,
hasstatus => true;
}
}
1 ответ
Попробуйте добавить атрибут hasrestart => true
на ваш mycherryd
сервисный ресурс; это скажет марионетке запустить "service mycherryd restart" вместо "service mycherryd stop"+
сервис mycherryd start`
Также убедитесь, что коды состояния самого скрипта init являются нормальными; часто случается, что авторы сценариев инициализации не следуют спецификации LSB для кодов выхода - т.е. service mycherryd stop; echo $?
и это должно сказать 0 для успешного выхода. Если нет, марионетке будет трудно управлять сервисом, и сопровождающие mycherryd должны исправить свой сценарий.