Dies hat möglicherweise mehr mit der Erkennung von Betriebssystemen zu tun, aber ich benötige speziell das derzeit auf dem System verwendete Init-System.
Fedora 15 und Ubuntu verwenden jetzt systemd, Ubuntu verwendete Upstart (Standardeinstellung für lange Zeit bis 15.04), während andere Varianten von System V verwenden.
Ich habe eine Anwendung, die ich schreibe, um ein plattformübergreifender Daemon zu sein. Die Init-Skripte werden dynamisch basierend auf Parametern generiert, die bei configure übergeben werden können.
Ich möchte nur das Skript für das jeweilige verwendete Init-System generieren. Auf diese Weise kann das Installationsskript ohne Parameter als root ausgeführt und der Dämon automatisch "installiert" werden.
Das habe ich mir ausgedacht:
- Suchen Sie in / bin nach systemd, upstart usw.
- Vergleichen Sie / proc / 1 / comm mit systemd, upstart usw
- Fragen Sie den Benutzer
Was wäre der beste Weg, dies auf einer Plattform zu tun?
Art des Zusammenhangs, Kann ich mich darauf verlassen, dass bash von der Mehrheit von * nix abhängig ist oder ist es von der Distribution / dem Betriebssystem abhängig?
Zielplattformen:
- Mac OS
- Linux (alle Distributionen)
- BSD (alle Versionen)
- Solaris, Minix und andere * nix
ps -p 1 -o command
(druckt den Pfad zur aktuellen init
). Unter Arch Linux und Fedora (IIRC) ist dies ein Symlink zur systemd
Binärdatei (wahrscheinlich auf allen systemd
Systemen gleich). Ein upstart
, init --help
druckt Nutzungsinformationen aus und auf meiner Box upstart
wird angegeben, an wen eine E-Mail gesendet werden soll. Unter FreeBSD (sysV) gibt dies einen Fehler zurück. Es mag ähnliche Hinweise auf anderen Systemen geben, aber seitdem ich diese Frage gestellt habe, habe ich beschlossen, sie nur für alle Plattformen zu erstellen und für jede einzelne Plattform separate Pakete zu erstellen.
sudo lsof -a -p 1 -d txt
dass dies zu noch genaueren Ergebnissen führen kann. ps
kann einen beliebigen Namen ausgeben, wobei lsof
Sie mit den tatsächlichen ausführbaren Pfad erhalten. (Siehe meine Frage unter unix.stackexchange.com/questions/102453/… )