Это может иметь большее отношение к обнаружению операционных систем, но мне особенно нужна система инициализации, используемая в настоящее время в системе.
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/… )