Dies hat vielleicht mehr mit der Erkennung von Betriebssystemen zu tun, aber ich brauche speziell das derzeit auf dem System verwendete Init-System.
Fedora 15 und Ubuntu verwenden jetzt systemd, Ubuntu verwendete früher Upstart (lange Standardeinstellung bis 15.04), während andere Variationen von System V verwenden.
Ich habe eine Anwendung, die ich schreibe, um ein plattformübergreifender Daemon zu sein. Die Init-Skripte werden dynamisch generiert, basierend auf Parametern, die beim Konfigurieren übergeben werden können.
Ich möchte nur das Skript für das jeweilige Init-System generieren, das sie verwenden. Auf diese Weise kann das Installationsskript vernünftigerweise ohne Parameter als root ausgeführt und der Daemon automatisch „installiert“ werden.
Das habe ich mir ausgedacht:
- Suchen Sie in /bin nach systemd, upstart usw.
- Vergleiche /proc/1/comm mit systemd, upstart usw.
- Fragen Sie den Nutzer
Was wäre der beste plattformübergreifende Weg, dies zu tun?
Art verwandt, Kann ich mich darauf verlassen, dass bash auf der Mehrheit von * nix ist, oder ist es von der Distribution/vom Betriebssystem abhängig?
Zielplattformen:
- Mac OS
- Linux (alle Distributionen)
- BSD (alle Versionen)
- Solaris, Minix und andere *nix
Akzeptierte Antwort:
Bei der zweiten Frage lautet die Antwort nein und Sie sollten einen Blick auf Ressourcen für portable Shell-Programmierung werfen.
Was den ersten Teil angeht – zuallererst müssen Sie sicherlich vorsichtig sein. Ich würde sagen, führen Sie mehrere Tests durch, um sicherzugehen – weil die Tatsache, dass jemand hat systemd (zum Beispiel) installiert ist, bedeutet dies nicht, dass es tatsächlich als Standard-init
verwendet wird . Sehen Sie sich auch /proc/1/comm
an kann irreführend sein, da einige Installationen verschiedener Init-Programme automatisch /sbin/init
erstellen können ein Symlink-Hardlink oder sogar eine umbenannte Version ihres Hauptprogramms.
Vielleicht ist es am nützlichsten, sich den Typ der Init-Skripte anzusehen – denn das sind die Dinge, die Sie tatsächlich erstellen werden, egal, was sie ausführt.
Als Randbemerkung können Sie sich auch OpenRC ansehen, das darauf abzielt, eine Struktur von Init-Skripten bereitzustellen, die sowohl mit Linux- als auch mit BSD-Systemen kompatibel ist.