Esto puede tener más que ver con la detección de sistemas operativos, pero específicamente necesito el sistema init actualmente en uso en el sistema.
Fedora 15 y Ubuntu ahora usan systemd, Ubuntu solía usar Upstart (tiempo predeterminado por defecto hasta 15.04), mientras que otros usan variaciones del Sistema V.
Tengo una aplicación que estoy escribiendo para ser un demonio multiplataforma. Los scripts de inicio se generan dinámicamente en función de los parámetros que se pueden pasar en la configuración.
Lo que me gustaría hacer es solo generar el script para el sistema de inicio particular que están utilizando. De esta manera, el script de instalación se puede ejecutar razonablemente sin parámetros como root y el demonio se puede "instalar" automáticamente.
Esto es lo que se me ocurrió:
- Busque systemd, upstart, etc. en / bin
- Compare / proc / 1 / comm con el systemd, upstart, etc.
- Pregunta al usuario
¿Cuál sería la mejor forma cruzada / plataforma de hacer esto?
Tipo de relacionado, ¿puedo depender de bash para estar en la mayoría de * nix o depende de la distribución / SO?
Plataformas objetivo:
- Mac OS
- Linux (todas las distribuciones)
- BSD (todas las versiones)
- Solaris, Minix y otros * nix
ps -p 1 -o command
(imprime la ruta a la actual init
). En Arch Linux y Fedora (IIRC), es un enlace simbólico al systemd
binario (probablemente igual en todos los systemd
sistemas). El upstart
, init --help
imprimirá información de uso, y en mi casilla, upstart
se menciona dónde dice a quién enviar un correo electrónico. En FreeBSD (sysV), esto devolverá un error. Puede haber pistas similares en otros sistemas, pero desde que hice esta pregunta, decidí crearlas para todas las plataformas y hacer paquetes separados para cada una.
sudo lsof -a -p 1 -d txt
puede dar resultados aún más exactos. ps
puede imprimir un nombre arbitrario, mientras que con lsof
usted obtendrá la ruta real ejecutable. (Ver mi pregunta unix.stackexchange.com/questions/102453/… )