ไม่มีไฟล์หรือไดเร็กทอรี /etc/init.d/functions ดังกล่าว


21

ฉันสร้างสคริปต์เริ่มต้นเพื่อเริ่ม / รีสตาร์ท / หยุดกลุ่มแอปพลิเคชัน ฉันใช้ lib /etc/init.d/functionsในสคริปต์ของฉัน มันทำงานได้ดีกับระบบของฉัน แต่มันไม่ทำงานสำหรับลูกค้า เขาได้รับข้อผิดพลาด:

ไม่มีไฟล์หรือไดเร็กทอรี /etc/init.d/functions ดังกล่าว

ตอนนี้ฉันไม่รู้ว่า linux ตัวใดที่ลูกค้าของฉันใช้ เป็นinit.d/functionsที่แตกต่างกันของแฟ้มสำหรับลินุกซ์ distros แตกต่างกันอย่างไร ถ้าเป็นเช่นนั้นฉันจะหามันได้อย่างไร


โปรดทราบว่าข้อผิดพลาดนี้อาจเกิดจากการสิ้นสุดของบรรทัด Windows
Emerson Rocha

คำตอบ:


24

มันขึ้นอยู่กับการกระจายที่คุณใช้ Debian และ Ubuntu มี/lib/lsb/init-functions; SuSE มี/etc/rc.status; ไม่มีของพวกเขาเข้ากันได้กับคนอื่น ๆ ในความเป็นจริงการแจกแจงบางอย่างไม่ได้ใช้/etc/init.dเลยหรือใช้ในลักษณะที่เข้ากันไม่ได้ (Slackware และ Arch เกิดขึ้นกับฉันจากส่วนหัวของฉัน;


ฉันจะรู้ได้ว่าไฟล์นี้อยู่ที่ไหนและมันอยู่ตรงไหนของ Redhat 5.5?
tecman

นอกจากนี้ฉันจะค้นหาชื่อไฟล์และพา ธ เหล่านั้นได้อย่างไร มีวิธีการทำเช่นนั้นหรือว่าเราสามารถหาได้จากเอกสารประกอบเท่านั้น?
tecman

ฉันทำได้โดยดูขณะที่ฉันมีทั้งสองใช้ได้; ฉันไม่มี Red Hat ติดตั้ง แต่คุณอาจพลาดความสำคัญของสิ่งที่ฉันพูดด้วยตัวหนาด้านบน: ฟังก์ชั่นในตัวคุณ/etc/init.d/functions ไม่มีอยู่ในดิสทริบิวชันอื่น ๆ การแจกแจงทุกครั้งจะมีกฎของตนเองสำหรับ/etc/init.dและฟังก์ชันไลบรารี (ถ้ามี) จะเน้นไปที่กฎเหล่านั้น ตัวอย่างเช่น rc_status -sSuSE มีฟังก์ชั่น "มาตรฐาน" ของ LSB บางอย่างซึ่งควรจะพบได้ใน/lib/lsb/init-functionsแต่ลูกค้าของคุณอาจไม่ได้ใช้งานการกระจายที่ได้รับการปรับปรุงเพื่อให้มัน
geekosaur

15

ในอิมเมจ CentOS 7 Dockerฉันต้องติดตั้งแพคเกจinitscriptsเพื่อติดตั้งสคริปต์นี้:

yum install -y initscripts

(ขอบคุณปัญหานี้docker-libraryที่ทำให้ฉันดูการกระทำนี้ )


สิ่งนี้แก้ไขปัญหาของฉันโดยใช้ Jenkins ใน Fedora 24 ในคอนเทนเนอร์ Docker (ใช้dnfแทนyumแน่นอน) ขอบคุณ!
geerlingguy

สิ่งนี้ยังใช้งานได้เมื่อติดตั้ง MarkLogic 9 ลงในคอนเทนเนอร์ Docker Centos7 เอกสารการติดตั้งกล่าวถึงเพียงต้องการ lib.so.6 และ lsb-core-amd64 แต่ฉันเดาว่าเนื่องจากพวกเขากำลังพูดถึงการติดตั้งบน CentOS 7 แบบเต็มพวกเขาจะมองข้ามว่าคุณต้องการแพ็คเกจ initscripts
alc6379

12

นั่นขึ้นอยู่กับการกระจายอย่างแน่นอน คุณจะต้องค้นหา distro เพื่อที่จะเขียนสคริปต์ init ที่จับคู่อย่างเหมาะสม

คุณสามารถทำตามข้อกำหนดของ LSB (ฐานมาตรฐาน Linux) และหวังว่า distro ที่เป็นปัญหาก็เช่นกัน ข้อมูลจำเพาะในปัจจุบันกำหนดให้ฟังก์ชั่นสคริปต์ init มาตรฐานพร้อมใช้งานในรูปแบบ/lib/lsb/init-functions( ดูเอกสารที่นี่ ) บน Fedora และ distros อื่น ๆ ที่เกี่ยวข้อง Red Hat, ที่ให้บริการโดยredhat-lsbแพคเกจซึ่งเป็นตัวเลือก

ดังนั้นคุณต้องเข้าใจสิ่งที่คุณกำหนดเป้าหมาย ขอโทษ


1

การเพิ่มคำตอบล่าสุด

ดังที่ระบุไว้ในคำตอบอื่นรายละเอียด Linux Standard Base (LSB) จัดเตรียมวิธีในการเขียนinit.dสคริปต์เริ่มต้นทำงานโดยขึ้นอยู่กับแพลตฟอร์มโดยใช้ฟังก์ชัน init ที่กำหนดโดย LSB ดังที่แสดงไว้ที่นี่

ทั้งหมด LSB กระจายไปตาม (ทุกคนใหญ่) ให้ไฟล์/lib/lsb/init-functions(ซึ่งกำหนดฟังก์ชั่นการระบุไว้) ในเมตาแพคเกจlsb-core-noarchที่สามารถติดตั้งโดยใช้แพคเกจผู้จัดการการจัดจำหน่ายของ$PKGMAN $INSTOPT lsb-core-noarch( yum, dnf, apt, ... )

ตัวอย่างเช่นสคริปต์ init เป็นนี้

อย่างไรก็ตามที่กำหนดวิธีการsystemdอยู่ในขณะนี้ระบบและการบริการโดยพฤตินัยผู้จัดการกระจายมากที่สุดจะดีกว่าที่จะเขียนแทนการเขียนออกsystemd service unitinitscript


0

ฉันพลาดฟังก์ชั่นเหล่านั้นเมื่อผมย้ายไปอูบุนตูดังนั้นฉันสร้างห้องสมุดที่จะสร้างการทำงานของพวกเขา: efunctions


0

ฉันก็มีข้อผิดพลาดเดียวกันในขณะที่ฉันเรียกใช้คอนเทนเนอร์นักเทียบท่าของฉัน มันได้รับการแก้ไขโดยการเพิ่มบรรทัดด้านล่างใน Dockerfile ของฉัน

RUN yum install -y initscripts
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.