Może to mieć więcej wspólnego z wykrywaniem systemów operacyjnych, ale szczególnie potrzebuję obecnie używanego systemu init.
Fedora 15 i Ubuntu używają teraz systemd, Ubuntu używa Upstart (domyślnie długi czas do 15.04), podczas gdy inne używają odmian Systemu V.
Mam aplikację, którą piszę, aby być demonem międzyplatformowym. Skrypty inicjujące są generowane dynamicznie na podstawie parametrów, które można przekazać podczas konfiguracji.
To, co chciałbym zrobić, to wygenerowanie skryptu tylko dla konkretnego systemu init, którego używają. W ten sposób skrypt instalacyjny może być uruchamiany rozsądnie bez parametrów jako root, a demon może być „zainstalowany” automatycznie.
Oto co wymyśliłem:
- Wyszukaj systemd, upstart itp w / bin
- Porównaj / proc / 1 / comm z systemd, upstart itp
- Zapytaj użytkownika
Jaki byłby najlepszy sposób, aby to zrobić na wiele platform / platform?
Rodzaj pokrewnych. Czy mogę polegać na bash, aby być na większości * nix, czy jest to zależne od dystrybucji / systemu operacyjnego?
Platformy docelowe:
- System operacyjny Mac
- Linux (wszystkie dystrybucje)
- BSD (wszystkie wersje)
- Solaris, Minix i inne * nix
ps -p 1 -o command
(drukuje ścieżkę do prądu init
). W Arch Linux i Fedora (IIRC) jest to dowiązanie symboliczne do pliku systemd
binarnego (prawdopodobnie takie samo we wszystkich systemd
systemach). On upstart
, init --help
będzie drukować informacje o użytkowaniu, a na moim polu, upstart
jest wymieniony gdzie jest napisane, kto na e-mail. W FreeBSD (sysV) zwróci błąd. Mogą istnieć podobne wskazówki w innych systemach, ale odkąd zadałem to pytanie, postanowiłem po prostu utworzyć je dla wszystkich platform i utworzyć osobne pakiety dla każdego z nich.
sudo lsof -a -p 1 -d txt
może dać jeszcze dokładniejsze wyniki. ps
może wydrukować dowolną nazwę, podczas gdy wraz z lsof
tobą uzyskasz prawdziwą ścieżkę wykonywalną. (Zobacz moje pytanie unix.stackexchange.com/questions/102453/… )