Це може бути пов’язане з виявленням операційних систем, але мені спеціально потрібна система init, яка зараз використовується в системі.
Fedora 15 і Ubuntu тепер використовують systemd, Ubuntu використовували Upstart (тривалий час за замовчуванням до 15.04), інші використовують варіанти System V.
У мене є додаток, який я пишу, щоб бути демонстратором на різних платформах. Сценарії init динамічно генеруються на основі параметрів, які можна передавати під час налаштування.
Що я хотів би зробити, це лише генерувати сценарій для конкретної системи init, яку вони використовують. Таким чином, сценарій встановлення може запускатися розумно без параметрів як root, а демон може бути "встановлений" автоматично.
Ось що я придумав:
- Шукайте systemd, upstart тощо в / bin
- Порівняйте / proc / 1 / comm з systemd, upstart тощо
- Запитайте користувача
Який би кращий крос / платформний спосіб зробити це?
Вигляд спорідненого: Чи можу я залежати від того, щоб баш був на більшості * nix, чи це залежить від розподілу / ОС?
Цільові платформи:
- Mac OS
- Linux (усі дистрибутиви)
- BSD (усі версії)
- Solaris, Minix та інші * nix
ps -p 1 -o command
(друкує шлях до течії init
). Для Arch Linux та Fedora (IIRC) це символьне посилання на systemd
бінарне (можливо, те саме для всіх systemd
систем). Увімкнено upstart
, init --help
буде надруковано інформацію про використання, а в моєму вікні upstart
вказано, де зазначено кому надсилати електронну пошту. У FreeBSD (sysV) це поверне помилку. У інших системах можуть бути подібні підказки, але, задавши це питання, я вирішив просто створити їх для всіх платформ і скласти окремі пакети для кожної.
sudo lsof -a -p 1 -d txt
може дати ще більш точні результати. ps
може надрукувати довільне ім’я, тоді як з lsof
вами ви отримаєте реальний виконуваний шлях. (Дивіться моє запитання unix.stackexchange.com/questions/102453/… )