Ini mungkin lebih berkaitan dengan mendeteksi sistem operasi, tetapi saya secara khusus membutuhkan sistem init yang saat ini digunakan pada sistem.
Fedora 15 dan Ubuntu sekarang menggunakan systemd, Ubuntu digunakan untuk menggunakan Pemula (standar lama hingga 15,04), sementara yang lain menggunakan variasi Sistem V.
Saya memiliki aplikasi yang saya tulis untuk menjadi daemon lintas-platform. Skrip init sedang dibuat secara dinamis berdasarkan parameter yang dapat diteruskan pada konfigurasi.
Yang ingin saya lakukan adalah hanya menghasilkan skrip untuk sistem init tertentu yang mereka gunakan. Dengan cara ini skrip instalasi dapat dijalankan secara wajar tanpa parameter sebagai root dan daemon dapat "dipasang" secara otomatis.
Inilah yang saya buat:
- Cari systemd, pemula, dll di / bin
- Bandingkan / proc / 1 / comm dengan systemd, pemula, dll
- Tanyakan pada pengguna
Apa cara lintas / platform terbaik untuk melakukan ini?
Jenis yang terkait, Dapatkah saya bergantung pada bash untuk menjadi mayoritas * nix atau tergantung distribusi / OS?
Platform target:
- OS Mac
- Linux (semua distribusi)
- BSD (semua versi)
- Solaris, Minix, dan * nix lainnya
ps -p 1 -o command
(mencetak jalur ke arus init
). Di Arch Linux dan Fedora (IIRC), itu adalah symlink ke systemd
biner (mungkin sama pada semua systemd
sistem). Pada upstart
, init --help
akan mencetak informasi penggunaan, dan pada kotak saya, upstart
disebutkan di mana dikatakan siapa yang harus diemail. Pada FreeBSD (sysV), ini akan mengembalikan kesalahan. Mungkin ada petunjuk serupa pada sistem lain, tetapi sejak mengajukan pertanyaan ini, saya telah memutuskan untuk hanya membuat mereka untuk semua platform dan membuat paket terpisah untuk masing-masing.
sudo lsof -a -p 1 -d txt
mungkin memberikan hasil yang lebih tepat. ps
dapat mencetak nama arbitrer, sedangkan dengan lsof
Anda akan mendapatkan jalur yang dapat dieksekusi nyata. (Lihat pertanyaan saya unix.stackexchange.com/questions/102453/… )