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 systemdbiner (mungkin sama pada semua systemdsistem). Pada upstart, init --helpakan mencetak informasi penggunaan, dan pada kotak saya, upstartdisebutkan 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 txtmungkin memberikan hasil yang lebih tepat. psdapat mencetak nama arbitrer, sedangkan dengan lsofAnda akan mendapatkan jalur yang dapat dieksekusi nyata. (Lihat pertanyaan saya unix.stackexchange.com/questions/102453/… )