Это может иметь большее отношение к обнаружению операционных систем, но мне особенно нужна система инициализации, используемая в настоящее время в системе.
Fedora 15 и Ubuntu теперь используют systemd, Ubuntu раньше использовал Upstart (долгое время по умолчанию до 15.04), в то время как другие используют варианты System V.
У меня есть приложение, которое я пишу, чтобы стать кроссплатформенным демоном. Сценарии инициализации генерируются динамически на основе параметров, которые могут быть переданы при конфигурировании.
То, что я хотел бы сделать, это только создать сценарий для конкретной системы инициализации, которую они используют. Таким образом, скрипт установки может быть запущен без параметров в качестве пользователя root, а демон может быть автоматически «установлен».
Вот что я придумал:
- Поиск systemd, upstart и т. Д. В / bin
- Сравните / proc / 1 / comm с systemd, upstart и т. Д.
- Спросите пользователя
Каков наилучший кроссплатформенный способ сделать это?
Вид связанных, Могу ли я рассчитывать на то, что bash будет работать на большинстве * 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/… )