SIGSEGV et error_log
Posté : 30 mai 2014, 00:23
Bonjour,
Ce n'est pas vraiment un problème, mais j'aimerais bien comprendre.
J'ai un script qui effectue des opérations sur une base de données tournant en boucle (c'est voulu). Il exécute les opérations puis sleep() le reste du temps pour se lancer toutes les minutes.
Il se trouve que dans ce script, je loggais des erreurs et des infos de debug via error_log vers le fichier d'erreur de nginx (nginx + php-fpm). Le problème est que : rien ne s'écrit dans le fichier de log (à la limite c'est pas très grave), bien que d'autres scripts arrivent à écrire sur le fichier de log, mais surtout que périodiquement j'avais des erreurs de segmentation fault (SIGSEGV) qui faisaient redémarrer le child. Après avoir fait des traces xdebug j'en suis arrivé à la conclusion que c'est error_log() qui provoquait ces SIGSEGV (c'était la dernière fonction appelée avant le crash). Après avoir commenté tous les error_log(), plus de problème.
Ce que je suppose c'est qu'il y a un buffer qui garde tous les messages que j'envoie à error_log qui se vide en écrivant sur le fichier lorsque le script s'arrête. Dans mon cas le script ne s'arrête pas ce qui cause l'erreur et le fait que les messages ne s'écrivent pas dans le fichier. Ai-je raison ? Ou bien cela vient d'autre part ?
Ed0
Ce n'est pas vraiment un problème, mais j'aimerais bien comprendre.
J'ai un script qui effectue des opérations sur une base de données tournant en boucle (c'est voulu). Il exécute les opérations puis sleep() le reste du temps pour se lancer toutes les minutes.
Il se trouve que dans ce script, je loggais des erreurs et des infos de debug via error_log vers le fichier d'erreur de nginx (nginx + php-fpm). Le problème est que : rien ne s'écrit dans le fichier de log (à la limite c'est pas très grave), bien que d'autres scripts arrivent à écrire sur le fichier de log, mais surtout que périodiquement j'avais des erreurs de segmentation fault (SIGSEGV) qui faisaient redémarrer le child. Après avoir fait des traces xdebug j'en suis arrivé à la conclusion que c'est error_log() qui provoquait ces SIGSEGV (c'était la dernière fonction appelée avant le crash). Après avoir commenté tous les error_log(), plus de problème.
Ce que je suppose c'est qu'il y a un buffer qui garde tous les messages que j'envoie à error_log qui se vide en écrivant sur le fichier lorsque le script s'arrête. Dans mon cas le script ne s'arrête pas ce qui cause l'erreur et le fait que les messages ne s'écrivent pas dans le fichier. Ai-je raison ? Ou bien cela vient d'autre part ?
Ed0