Saya membuat skrip startup untuk memulai / memulai ulang / menghentikan sekelompok aplikasi. Saya menggunakan lib /etc/init.d/functions
dalam skrip saya. Ini bekerja dengan baik pada sistem saya, tetapi tidak berfungsi untuk klien saya; dia mendapatkan kesalahan:
Tidak ada file atau direktori /etc/init.d/functions
Saat ini saya tidak tahu distro linux mana yang digunakan klien saya. Apakah init.d/functions
file berbeda untuk distro Linux yang berbeda? Jika demikian, bagaimana saya bisa menemukannya?
init-script
tecman
sumber
sumber
Jawaban:
Ini khusus untuk distribusi apa pun yang Anda jalankan. Debian dan Ubuntu miliki
/lib/lsb/init-functions
; SuSE memiliki/etc/rc.status
; tidak satu pun dari mereka yang kompatibel dengan yang lain. Bahkan, beberapa distribusi tidak menggunakan/etc/init.d
sama sekali, atau menggunakannya dengan cara yang tidak kompatibel (Slackware dan Arch muncul di kepala saya; ada yang lain).sumber
/etc/init.d/functions
tidak ada pada distribusi lain. Setiap distribusi memiliki aturannya sendiri/etc/init.d
, dan pustaka fungsinya (jika ada) berorientasi pada aturan tersebut; misalnya, SuSErc_status -s
. Ada beberapa fungsi "standar" LSB, yang seharusnya ditemukan/lib/lsb/init-functions
, tetapi klien Anda mungkin tidak menjalankan distribusi yang telah diperbarui untuk menyediakannya.Dalam gambar CentOS 7 Docker saya harus menginstal paket
initscripts
agar skrip ini diinstal:(Berkat masalah ini
docker-library
yang membuat saya melihat komit ini )sumber
dnf
bukanyum
tentu saja). Terima kasih!Itu mutlak tergantung pada distribusi. Anda benar-benar perlu mencari tahu distro untuk menulis skrip init yang sesuai.
Anda juga dapat mengikuti spesifikasi LSB (Linux Standard Base) dan berharap bahwa distro yang bersangkutan juga melakukannya. Spesifikasi saat ini menentukan bahwa fungsi skrip init standar tersedia sebagai
/lib/lsb/init-functions
( lihat dokumen di sini ). Pada Fedora dan distro terkait Red Hat lainnya, yang disediakan olehredhat-lsb
paket, yang merupakan opsional .Jadi, Anda benar-benar harus mencari tahu apa yang Anda targetkan. Maaf.
sumber
Menambahkan jawaban terbaru
Sebagaimana dicatat dalam jawaban lain, spesifikasi Linux Standard Base (LSB) menyediakan cara untuk menulis
init.d
skrip startup platform independen , menggunakan fungsi init yang ditentukan LSB seperti yang tercantum di siniSemua LSB distribusi compliant (semua yang besar) menyediakan file
/lib/lsb/init-functions
(yang mendefinisikan fungsi yang terdaftar) dalam meta-paketlsb-core-noarch
yang dapat diinstal dengan menggunakan manajer paket distribusi ini$PKGMAN $INSTOPT lsb-core-noarch
(yum
,dnf
,apt
, ...).Contoh dari skrip init adalah ini .
Namun, mengingat bagaimana
systemd
sekarang sistem de-facto dan manajer layanan untuk sebagian besar distribusi, lebih baik untuk menulissystemd service unit
daripada menulisinitscript
.sumber
Saya melewatkan fungsi-fungsi itu ketika saya pindah ke Ubuntu, jadi saya membuat perpustakaan yang menciptakan kembali fungsinya: efek .
sumber
Saya juga mendapatkan kesalahan yang sama ketika saya menjalankan wadah buruh pelabuhan saya. Itu diperbaiki dengan menambahkan baris di bawah ini di Dockerfile saya
sumber