Fichiers .lock et crash

Bonjour à tous,

Petite question du jour… :mrgreen:

Je suis toujours occupé sur mon système init.d en JS avec lequel je crée un fichier .lock dans lequel je stocke le PID.

Jusque là, ça va… mais comment fais-je pour savoir s’il date d’avant un crash du serveur, svp?

Peut-être y a-t-il une meilleure façon de faire… 'fin, c’est une question ouverte (je cherche à faire quelque chose de sécurisé et qui suit les bonnes pratiques).

Donc n’hésitez pas à me faire vos suggestions, même si ça doit me faire reprendre de zéro. :wink:

C’est pour ça que sur Debian on écrit les scripts init en shell, ce qui permet de réutiliser les fonctions [mono]start-stop-daemon[/mono] et consorts situées dans [mono]/lib/lsb/init-functions[/mono] qui ont été écrites par des gens beaucoup plus compétents que toi et moi. :wink:

Puisque tu ne peux évidemment pas les réutiliser telles quelles en JS, le mieux à faire est sûrement de les porter, ça t’évitera de – mal – réinventer la roue (enfin non le mieux à faire c’est d’écrire ton script en shell pour pouvoir bénéficier des corrections desdites fonctions lors de mises à jour, mais tu n’as pas l’air décidé à faire ça donc le portage reste probablement la solution la moins pire).

Merci de m’avoir répondu si rapidement. :slightly_smiling:

En fait, d’après mes tests d’hier, un hack est possible.

Mes LSB tags sont bien pris en compte et les fonctions systèmes devraient être gérées, puisqu’elles ont certainement leur interpréteur déclaré en début de fichier.

Mais je ne sais pas trop comment faire en sorte différencier une commande start d’après un crash d’un start classique.

Tu confonds deux choses. Ton autre fil concerne les en-têtes LSB, qui indiquent uniquement à [mono]insserv[/mono] comment insérer ton script dans les divers répertoires [mono]/etc/rc*.d[/mono] et dans quelle mesure il peut être lancé en parallèle lors du boot.

Moi je te parlais des fonctions shell situées dans [mono]/lib/lsb/init-functions[/mono] qui contiennent déjà une bonne partie de la logique dont tu as besoin dans les scripts init (principalement pour la partie log), ainsi que du programme [mono]/sbin/start-stop-daemon[/mono] qui gère tout ce qu’il y a à gérer pour démarrer/arrêter un démon (y compris les fichiers PID, incluant mais non limité à la détection de crash d’un démon).
[size=80]Bon d’accord je me suis planté dans mon message précédent, je croyais me souvenir que [mono]start-stop-daemon[/mono] était une fonction shell mais en fait après vérification c’est un binaire séparé.[/size] :blush:

Du coup c’est encore plus simple que je ne pensais au départ : tu n’as même pas à porter la fonction [mono]start-stop-daemon[/mono] puisque ce n’est pas une fonction, tu as juste à appeler la commande avec les bons arguments. Voir [mono]man start-stop-daemon[/mono].

Après, si tu tiens absolument à tout écrire en JS sans appeler aucune commande shell externe, bah, les sources de [mono]start-stop-daemon[/mono] sont disponibles pour voir comment ils ont fait… (ça fait partie du paquet [mono]dpkg[/mono])
Mais attention, ce n’est certainement pas trivial à réécrire, simplement réutiliser la commande est ce qu’il y a de plus sûr et de plus rapide.

Je ne sais pas comment je n’y ai pas pensé avant… plutôt que de jouer avec de l’écriture de fichier (qui prend des ressources), je profite du cache des modules de Node.js :slightly_smiling:

Merci tout de même. :smiley: