GNU/Linux >> Linux Esercitazione >  >> Linux

Rileva il sistema Init usando la shell?

Questo potrebbe avere più a che fare con il rilevamento dei sistemi operativi, ma ho bisogno in particolare del sistema init attualmente in uso sul sistema.

Fedora 15 e Ubuntu ora usano systemd, Ubuntu usava Upstart (predefinito da molto tempo fino al 15.04), mentre altri usano varianti di System V.

Ho un'applicazione che sto scrivendo per essere un demone multipiattaforma. Gli script di inizializzazione vengono generati dinamicamente in base a parametri che possono essere passati in configure.

Quello che vorrei fare è generare solo lo script per il particolare sistema di inizializzazione che stanno usando. In questo modo lo script di installazione può essere eseguito ragionevolmente senza parametri come root e il demone può essere "installato" automaticamente.

Questo è quello che mi è venuto in mente:

  • Cerca systemd, upstart, ecc in /bin
  • Confronta /proc/1/comm con systemd, upstart, ecc.
  • Chiedi all'utente

Quale sarebbe il miglior modo multipiattaforma per farlo?

In qualche modo correlato, Posso dipendere da bash per essere sulla maggior parte di *nix o dipende dalla distribuzione/dal sistema operativo?

Piattaforme target:

  • Mac OS
  • Linux (tutte le distribuzioni)
  • BSD (tutte le versioni)
  • Solaris, Minix e altri *nix

Risposta accettata:

Per la seconda domanda, la risposta è no e dovresti dare un'occhiata a Risorse per la programmazione di shell portatili.

Per quanto riguarda la prima parte, prima di tutto bisogna sicuramente stare attenti. Direi di eseguire diversi test per essere sicuro – perché il fatto che qualcuno ha systemd (ad es.) installato, non significa che sia effettivamente utilizzato come init predefinito . Inoltre, guardando /proc/1/comm può essere fuorviante, perché alcune installazioni di vari programmi init possono creare automaticamente /sbin/init un collegamento simbolico o anche una versione rinominata del loro programma principale.

Forse la cosa più utile potrebbe essere guardare il tipo di script di init, perché quelli sono ciò che creerai effettivamente, indipendentemente da cosa li esegue.

Come nota a margine, potresti anche dare un'occhiata a OpenRC che mira a fornire una struttura di script di inizializzazione compatibile sia con i sistemi Linux che BSD.


Linux
  1. Qual è l'attuale runlevel del sistema Linux?

  2. Come rilevare se la shell è controllata da Ssh?

  3. Qual è lo scopo di "utente di sistema" in MySQL Replication

  4. Che senso ha usare la macro linux access_ok()

  5. Qual è l'ambito delle variabili esportate nella shell Unix?

Conosci il tuo sistema (usando la riga di comando)

Che cos'è la shell in Linux?

Come modificare la shell predefinita nel sistema Linux

Qual è la differenza tra Login e Non-Login Shell

Cos'è un file .sh?

Qual è l'overhead dell'utilizzo di subshell?