2 votes

kill SIGABRT ne génère pas de fichier core à partir d'un démon lancé depuis crontab

J'exécute CentOS 5.5 et je travaille sur une application serveur pour laquelle j'ai parfois besoin de forcer le core dump afin de voir ce qui se passe. Si je démarre mon serveur depuis Shell et que j'envoie kill SIGABRT, un fichier core est créé. Si je lance le même programme depuis crontab et que je lui envoie le même signal, le serveur est "tué" mais aucun fichier core n'est généré. Quelqu'un sait-il pourquoi et ce qu'il faut ajouter à mon code ou modifier dans les paramètres du système pour permettre la génération du fichier core ?

Juste un mot d'accompagnement
J'ai mis ulimit à unlimited dans /etc/profile.

J'ai mis

  • kernel.core_uses_pid = 1
  • kernel.core_pattern=/var/cores/%h-%e-%p.core

dans /etc/sysctl.conf

De plus, mon application serveur a été ajoutée à la crontab sous le même identifiant de connexion car je l'exécute depuis Shell.

Toute aide est la bienvenue.

1voto

jason saldo Points 5036

Le répertoire de travail actuel d'une tâche cron peut être différent de celui auquel vous vous attendez. Essayez de faire cd /some/writeable/dir && yourdaemon dans votre entrée crontab. De plus, vous devriez normalement lancer les deamons en utilisant init ou Upstart ou similaire. Voir Gestion des processus .

De man 5 core :

Il y a plusieurs circonstances dans lesquelles un fichier de vidage de noyau n'est pas pro produit :

  • Le processus n'a pas la permission d'écrire le fichier central. (Par par défaut, le fichier core s'appelle core, et est créé dans le répertoire de travail répertoire de travail actuel. Voir ci-dessous pour plus de détails sur le nommage). L'écriture du fichier core échouera si le répertoire dans lequel il doit être créé est n'est pas inscriptible, ou si un fichier avec le même nom existe et n'est pas écrit ou n'est pas un fichier normal (par exemple, c'est un répertoire ou un lien sym un répertoire ou un lien symétrique).

  • Un fichier (inscriptible, régulier) portant le même nom que celui qui serait utilisé pour le core dump existe déjà, mais il y a plus d'un lien dur. vers ce fichier.

  • Le système de fichiers où le fichier core dump serait créé est plein ; ou n'a plus d'inodes ; ou est monté en lecture seule ; ou l'utilisateur a atteint son quota pour le système de fichiers.

  • Le répertoire dans lequel le fichier core dump doit être créé n'est pas existe pas.

  • Le RLIMIT_CORE (taille du fichier de base) ou RLIMIT_FSIZE (taille du fichier). pour le processus sont mises à zéro ; voir getrlimit(2) et la documentation de la commande ulimit de Shell (limit dans csh(1)).

  • Le binaire exécuté par le processus n'a pas la permission de lecture activée.

  • Le processus exécute un programme set-user-ID (set-group-ID) qui appartient à un utilisateur (groupe) autre que l'ID utilisateur (groupe) réel du processus. le processus. (Cependant, voir la description de l'opération prctl(2) PR_SET_DUMPABLE, et la description de l'opération /proc/sys/fs/suid_dumpable dans proc(5)).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X