Isso pode ter mais a ver com a detecção de sistemas operacionais, mas eu preciso especificamente do sistema init atualmente em uso no sistema.
O Fedora 15 e o Ubuntu agora usam o systemd, o Ubuntu costumava usar o Upstart (há muito tempo padrão até 15.04), enquanto outros usam variações do System V.
Eu tenho um aplicativo que estou escrevendo para ser um daemon de plataforma cruzada. Os scripts init estão sendo gerados dinamicamente com base em parâmetros que podem ser transmitidos no configure.
O que eu gostaria de fazer é gerar apenas o script para o sistema init específico que eles estão usando. Dessa forma, o script de instalação pode ser executado razoavelmente sem parâmetros como root e o daemon pode ser "instalado" automaticamente.
Isto é o que eu vim com:
- Procure systemd, upstart, etc em / bin
- Compare / proc / 1 / comm ao systemd, upstart, etc
- Pergunte ao usuário
Qual seria a melhor maneira multiplataforma de fazer isso?
Tipo de relação, posso depender do bash para estar na maioria dos * nix ou depende da distribuição / SO?
Plataformas alvo:
- Mac OS
- Linux (todas as distribuições)
- BSD (todas as versões)
- Solaris, Minix e outros * nix
ps -p 1 -o command
(imprime o caminho para o atual init
). No Arch Linux e Fedora (IIRC), é um link simbólico para o systemd
binário (provavelmente o mesmo em todos os systemd
sistemas). Ativado upstart
, init --help
imprime informações de uso e, na minha caixa, upstart
é mencionado onde diz para quem enviar e-mail. No FreeBSD (sysV), isso retornará um erro. Pode haver pistas semelhantes em outros sistemas, mas desde que fiz essa pergunta, decidi criá-las para todas as plataformas e criar pacotes separados para cada uma.
sudo lsof -a -p 1 -d txt
pode dar resultados ainda mais exatos. ps
pode imprimir um nome arbitrário, enquanto que lsof
você obterá o caminho real do executável. (Veja minha pergunta unix.stackexchange.com/questions/102453/… )