Que signifie “<nom_service> mort mais sous-système verrouillé”?

38

J'essaie d'exécuter memcached sur une boîte de centos et cela dure pendant un moment, mais finit par se retrouver dans cet état:

memcached dead mais subsys verrouillé

netstat montre ceci:

tcp        0      0 :::11211                    :::*                        LISTEN      
udp        0      0 0.0.0.0:11211               0.0.0.0:*                               

ps montre ceci:

nobody   21983  0.0  1.8  60272 19912 ?        Ssl  16:46   0:00 memcached -d -p 11211 -u nobody -c 1024 -m 64

Quelqu'un sait ce que ça veut dire?

Nick Brosnahan
la source

Réponses:

61

Cela signifie que le service était en cours d'exécution à un moment donné, mais s'est écrasé.

Lorsque vous démarrez un service, il crée un fichier "verrouillé" pour indiquer que le service est en cours d'exécution. Cela permet d’éviter plusieurs instances du service. Lorsque vous arrêtez un service, ce fichier de verrouillage est supprimé.

Lorsqu'un service en cours d'exécution plante, le fichier de verrouillage existe mais le processus n'existe plus. Ainsi, le message.

Regardez les deux zones /var/run/*.pidet /var/lock/subsys/*. Ceux-ci sont censés être d'accord les uns avec les autres. Autrement dit, si le fichier de verrouillage (fichier temporaire) /var/lock/subsys/crondexiste, la première ligne du fichier /var/run/crond.piddoit contenir le PID du processus en cours d'exécution pour ce service. Si aucun processus de ce type n'est en cours, alors quelque chose ne va pas. Si un processus est en cours d'exécution (comme vous le voyez) mais que ce n'est pas ce PID, alors quelque chose est probablement confus.

Eddie
la source
N'est-il pas toujours en cours d'exécution s'il est lié à un port et répertorié dans ps?
Nick Brosnahan
J'ai étendu ma réponse. Faites "ls / var / lock / subsys / memcached" (je suppose que ce fichier existe) puis "cat /var/run/memcached.pid" et regardez la première ligne. La première ligne est le PID que vous devriez vous attendre à voir pour memcached.
Eddie
Désolé, j'ai compris ce qui se passait. Il courait toujours. Je l'ai lancé avec "sudo / sbin / service memcached start", mais en revenant dans mon historique, j'ai obtenu le statut en utilisant "/ sbin / service memcached service". PEBCAK. Tout est bien. Merci de votre aide.
Nick Brosnahan
5
Ah, et si vous n'exécutez pas l'état en tant que root, vous n'avez peut-être pas accès en lecture à /var/run/memcached.pid. La commande a donc supposé que le sous-système était mort car il ne pouvait pas localiser le processus correct.
Eddie