Böyle bir dosya veya dizin /etc/init.d/functions yok


21

Bir grup uygulamayı başlatmak / yeniden başlatmak / durdurmak için bir başlangıç ​​komut dosyası oluşturdum. Senaryomda lib'i kullandım /etc/init.d/functions. Sistemimde iyi çalışıyor, ancak müşterim için çalışmıyor; hatayı alıyor:

Böyle bir dosya veya dizin /etc/init.d/functions yok

Şu anda müvekkilimin hangi linux dağıtımını kullandığını bilmiyorum. Mı init.d/functionsfarklı Linux dağıtımları için dosya farklı? Öyleyse, nasıl bulabilirim?


Bu hatanın Windows satır sonlarından da kaynaklanabileceğini unutmayın.
Emerson Rocha

Yanıtlar:


24

Çalıştırdığınız dağıtımlara özgüdür. Debian ve Ubuntu /lib/lsb/init-functions; SuSE /etc/rc.status; hiçbiri diğerleriyle uyumlu değildir. Aslında, bazı dağıtımlar hiç kullanmaz /etc/init.dveya uyumsuz bir şekilde kullanır (Slackware ve Arch bana kafamın üstünden meydana gelir; diğerleri var).


Hangi dosya olduğunu ve Redhat 5.5 için nerede olduğunu bilebilir miyim?
tecman

Ayrıca, bu dosya adını ve yolunu nasıl bulabilirim? Bunu yapmanın herhangi bir yolu var mı yoksa yalnızca dokümantasyonda bulabiliyor muyuz?
tecman

Her ikisine de sahip olduğum için baktım. Red Hat yüklemem yok. Ancak yukarıda koyu bir şekilde söylediklerimin önemini kaçırmış olabilirsiniz: İçinizdeki işlevler diğer dağıtımlarda /etc/init.d/functions mevcut değildir . Her dağıtım için kendi kuralları vardır /etc/init.dve işlev kitaplığı (varsa) bu kurallara yöneliktir; örneğin, SuSE rc_status -s. Bulunması gereken bazı LSB "standart" işlevleri vardır /lib/lsb/init-functions, ancak istemciniz bunu sağlamak için güncellenmiş bir dağıtım çalıştırmıyor olabilir.
geekosaur

15

In CentOS 7 Docker görüntünün ben sadece paketini yüklemeyi vardı initscriptsbu komut yüklü olması için sırayla:

yum install -y initscripts

(Sayesinde bu konudadocker-library hangi beni bakmak yapılan işlemek bu )


Bu, Docker kapsayıcısındaki Fedora 24'teki Jenkins kullanarak sorunumu çözdü. (sadece elbette dnfyerine kullanılır yum). Teşekkürler!
geerlingguy

Bu, MarkLogic 9'u bir Centos7 liman işçisi konteynırına kurarken de çalışır. Kurulum dokümanları sadece lib.so.6 ve lsb-core-amd64'e ihtiyaç duyduğundan bahsediyor, ancak tam bir CentOS 7 kurulumuna kurulumdan söz ettiklerinden tahmin ediyorum, initscripts paketine ihtiyacınız olduğunu göz ardı ediyorlardı.
alc6379

12

Bu kesinlikle dağılıma bağlıdır. Doğru şekilde eşleşen bir init betiği yazmak için dağıtımı bulmanız gerekecek.

Ayrıca LSB (Linux Standard Base) spesifikasyonunu takip edebilir ve söz konusu dağıtımın da yapmasını umabilirsiniz. Geçerli belirtim, standart init komut dosyası işlevlerinin şu şekilde kullanılabilir olduğunu belirler /lib/lsb/init-functions( buradaki belgelere bakın ). Fedora ve Red Hat ile ilgili diğer dağıtımlarda, isteğe bağlı olarakredhat-lsb paket tarafından sağlanır .

Yani, gerçekten neyi hedeflediğinizi bulmanız gerekiyor. Üzgünüm.


1

Son bir cevap ekleme

Başka bir cevapta belirtildiği gibi, Linux Standard Base (LSB) özellikleri init.d, burada listelenen LSB tanımlı init işlevlerini kullanarak platformdan bağımsız başlangıç ​​komut dosyaları yazmak için bir yol sağlar

Tüm LSB uyumlu dağılımlar (bütün büyük olanlar) dosyası temin /lib/lsb/init-functionsmeta paketinde (listelenen fonksiyonları tanımlar) lsb-core-noarchdağıtımın paket yöneticisini kullanarak monte edilebilir $PKGMAN $INSTOPT lsb-core-noarch( yum, dnf, apt, ...).

Böyle bir başlatma komut örneğidir bu .

Bununla birlikte, systemdçoğu dağıtım için fiili sistem ve servis yöneticisi nasıl olduğu göz önüne alındığında , bir yazmak systemd service unityerine bir yazmak daha iyidir initscript.


0

Ubuntu'ya taşındığımda bu işlevleri kaçırdım, bu yüzden işlevlerini yeniden yaratan bir kütüphane oluşturdum: efunctions .


0

Docker kapsayıcısını çalıştırırken de aynı hatayı aldım. Dockerfile dosyama aşağıdaki satır eklenerek düzeltildi

RUN yum install -y initscripts
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.