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

Остановка memcached: [НЕ ИСПОЛЬЗУЕТСЯ]. Зачем?

У моего приложения проблемы с остановкой memcached.

Я использую php, и срок действия определенных ключей истекает через каждый час. Однако эти ключи и значения больше не обновляются.

Когда я бегу:

/etc/init.d/memcached restart

Получаю следующее:

Stopping memcached:                                        [FAILED]
Starting memcached:                                        [  OK  ]

Я должен запустить killall memcached для остановки memcached. Затем я запускаю перезапуск, и все в порядке.

Я не совсем уверен, что вызывает это, но мне нужно, чтобы memcached перезапускался каждый час. Где мне искать, чтобы узнать, что вызывает это?

Честно говоря, я бы предположил, что что-то вызывает сбой memcached. И если memcached не запускается, когда вы пытаетесь его остановить, он потерпит неудачу (потому что он уже остановлен). Так это объяснило бы, почему /etc/init.d/memcached stop (или первая часть /etc/init.d/memcached restart) терпит неудачу.

Но потом вы говорите, что вам нужно бежать killall memcached чтобы заставить его остановиться. Это наводит на мысль о том, что ваша система инициализации теряет отслеживание процесса. Поскольку я не знаю, какую систему инициализации вы используете, трудно сказать наверняка.

Большинство дистрибутивов в наши дни используют SystemD, и у меня были некоторые проблемы с Debian из-за проблем, вызванных обратной совместимостью со старыми скриптами SysVinit.

Глядя на команды, которые вы используете для управления своей службой, вы напрямую вызываете сценарий SysVinit, поэтому я предполагаю, что либо вы используете SysVinit, либо SystemD с совместимостью с SysVinit.

Если у вас нет SystemD, то почти наверняка что-то не так с вашей конфигурацией initscript и / или memcached.

Если у вас есть SystemD, то это, вероятно, вызвано некоторыми проблемами связи между вашим initscript и SystemD (и все еще могут быть проблемы с конфигурацией memcached). IMO, лучший путь вперед - это написать правильный служебный файл SystemD и напрямую использовать команды SystemD; т.е. systemctl COMMAND SERVICE_NAME.service. Их очень легко написать, Google поможет вам (попробуйте что-нибудь вроде «как написать файл службы systemd»)

Для меня это было потому, что я изначально бегал memcached -d вручную.

Позже, когда я пытался бежать service memcached restart/stop, команда остановки завершится ошибкой. После убийства процесса вручную service memcached restart/stop работал как положено.