Tidak ada file atau direktori /etc/init.d/functions


21

Saya membuat skrip startup untuk memulai / memulai ulang / menghentikan sekelompok aplikasi. Saya menggunakan lib /etc/init.d/functionsdalam 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/functionsfile berbeda untuk distro Linux yang berbeda? Jika demikian, bagaimana saya bisa menemukannya?


Perhatikan bahwa kesalahan ini juga dapat disebabkan oleh ujung jalur Windows.
Emerson Rocha

Jawaban:


24

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.dsama sekali, atau menggunakannya dengan cara yang tidak kompatibel (Slackware dan Arch muncul di kepala saya; ada yang lain).


dapatkah saya tahu mana file tersebut dan di mana letak Redhat 5.5?
tecman

Juga, bagaimana saya bisa menemukan nama dan jalur file tersebut? adakah cara untuk melakukan itu atau hanya kita dapat menemukannya dari dokumentasi?
tecman

Saya melakukannya dengan melihat, karena saya memiliki keduanya tersedia; Saya tidak memiliki instalasi Red Hat. Tetapi Anda mungkin telah melewatkan pentingnya apa yang saya katakan dalam huruf tebal di atas: fungsi dalam Anda /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, SuSE rc_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.
geekosaur

15

Dalam gambar CentOS 7 Docker saya harus menginstal paket initscriptsagar skrip ini diinstal:

yum install -y initscripts

(Berkat masalah inidocker-library yang membuat saya melihat komit ini )


Ini memperbaiki masalah saya menggunakan Jenkins di Fedora 24 dalam wadah Docker. (hanya digunakan dnfbukan yumtentu saja). Terima kasih!
geerlingguy

Ini juga berfungsi ketika menginstal MarkLogic 9 ke dalam wadah buruh pelabuhan Centos7. Dokumen instalasi hanya menyebutkan perlu lib.so.6 dan lsb-core-amd64, tapi saya menduga karena mereka berbicara tentang menginstal pada instalasi CentOS 7 penuh, mereka akan mengabaikan bahwa Anda memerlukan paket skrip init.
alc6379

12

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 oleh redhat-lsbpaket, yang merupakan opsional .

Jadi, Anda benar-benar harus mencari tahu apa yang Anda targetkan. Maaf.


1

Menambahkan jawaban terbaru

Sebagaimana dicatat dalam jawaban lain, spesifikasi Linux Standard Base (LSB) menyediakan cara untuk menulis init.dskrip startup platform independen , menggunakan fungsi init yang ditentukan LSB seperti yang tercantum di sini

Semua LSB distribusi compliant (semua yang besar) menyediakan file /lib/lsb/init-functions(yang mendefinisikan fungsi yang terdaftar) dalam meta-paket lsb-core-noarchyang 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 systemdsekarang sistem de-facto dan manajer layanan untuk sebagian besar distribusi, lebih baik untuk menulis systemd service unitdaripada menulis initscript.


0

Saya melewatkan fungsi-fungsi itu ketika saya pindah ke Ubuntu, jadi saya membuat perpustakaan yang menciptakan kembali fungsinya: efek .


0

Saya juga mendapatkan kesalahan yang sama ketika saya menjalankan wadah buruh pelabuhan saya. Itu diperbaiki dengan menambahkan baris di bawah ini di Dockerfile saya

RUN yum install -y initscripts
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.