GNU/Linux >> Tutoriels Linux >  >> Linux

Détecter le système d'initialisation à l'aide du shell ?

Cela peut avoir plus à voir avec la détection des systèmes d'exploitation, mais j'ai spécifiquement besoin du système init actuellement utilisé sur le système.

Fedora 15 et Ubuntu utilisent maintenant systemd, Ubuntu utilisait Upstart (par défaut depuis longtemps jusqu'au 15.04), tandis que d'autres utilisent des variantes de System V.

J'ai une application que j'écris pour être un démon multiplateforme. Les scripts d'initialisation sont générés dynamiquement en fonction de paramètres qui peuvent être transmis lors de la configuration.

Ce que j'aimerais faire, c'est générer uniquement le script pour le système d'initialisation particulier qu'ils utilisent. De cette façon, le script d'installation peut être exécuté raisonnablement sans paramètres en tant que root et le démon peut être "installé" automatiquement.

Voici ce que j'ai trouvé :

  • Recherchez systemd, upstart, etc. dans /bin
  • Comparez /proc/1/comm à systemd, upstart, etc
  • Demander à l'utilisateur

Quel serait le meilleur moyen multiplateforme de procéder ?

Un peu lié, Puis-je dépendre de bash pour être sur la majorité de *nix ou est-ce que cela dépend de la distribution/du système d'exploitation ?

Plates-formes cibles :

  • Mac OS
  • Linux (toutes les distributions)
  • BSD (toutes versions)
  • Solaris, Minix et autres *nix

Réponse acceptée :

Pour la deuxième question, la réponse est non et vous devriez jeter un œil aux ressources pour la programmation shell portable.

Quant à la première partie - tout d'abord, vous devez certainement être prudent. Je dirais effectuez plusieurs tests pour vous assurer – parce que le fait que quelqu'un ait systemd (par ex.) installé, ne signifie pas qu'il est réellement utilisé comme init par défaut . Aussi, en regardant /proc/1/comm peut être trompeur, car certaines installations de divers programmes d'initialisation peuvent automatiquement créer /sbin/init un lien symbolique ou même une version renommée de leur programme principal.

Peut-être que la chose la plus utile pourrait être de regarder le type de scripts d'initialisation - parce que c'est ce que vous allez réellement créer, peu importe ce qui les exécute.

En passant, vous pouvez également jeter un œil à OpenRC qui vise à fournir une structure de scripts d'initialisation compatible avec les systèmes Linux et BSD.


Linux
  1. Que se passe-t-il exactement lorsque j'exécute un fichier dans le shell ?

  2. Comment détecter si le shell est contrôlé depuis Ssh ?

  3. Quel est le but de "l'utilisateur système" dans la réplication MySQL

  4. Quel est le moyen le plus simple de SSH en utilisant Python ?

  5. Que fait l'appel système brk() ?

Apprenez à connaître votre système (en utilisant la ligne de commande)

Qu'est-ce que le Shell sous Linux ?

Comment changer le shell par défaut dans le système Linux

Quelle est la différence entre la connexion et le shell sans connexion

Qu'est-ce qu'un fichier .sh ?

Quel est le surcoût lié à l'utilisation de sous-shells ?