Không có tệp hoặc thư mục /etc/init.d/fifts như vậy


21

Tôi đã tạo một tập lệnh khởi động để bắt đầu / khởi động lại / dừng một nhóm ứng dụng. Tôi đã sử dụng lib /etc/init.d/functionstrong kịch bản của tôi. Nó hoạt động tốt trên hệ thống của tôi, nhưng nó không hoạt động cho khách hàng của tôi; anh ta đang nhận được lỗi:

Không có tệp hoặc thư mục /etc/init.d/fifts như vậy

Ngay bây giờ tôi không biết bản phân phối linux nào mà máy khách của tôi sử dụng. Là init.d/functionstập tin khác nhau cho các bản phân phối Linux khác nhau? Nếu vậy, làm thế nào tôi có thể tìm thấy nó?


Lưu ý rằng lỗi này cũng có thể do kết thúc dòng Windows.
Emerson Rocha

Câu trả lời:


24

Nó cụ thể cho bất kỳ phân phối nào bạn đang chạy. Debian và Ubuntu có /lib/lsb/init-functions; SuSE có /etc/rc.status; không ai trong số họ tương thích với những người khác. Trên thực tế, một số bản phân phối hoàn toàn không sử dụng /etc/init.dhoặc sử dụng nó theo cách không tương thích (Slackware và Arch xảy ra với tôi ngoài đỉnh đầu; có những cái khác).


Tôi có thể biết tập tin nào và nó nằm ở đâu cho Redhat 5.5 không?
tecman

Ngoài ra, làm thế nào tôi có thể tìm thấy những tên tập tin và đường dẫn? Có cách nào để làm điều đó hay là chúng ta chỉ có thể tìm thấy nó từ tài liệu?
tecman

Tôi đã làm điều đó bằng cách tìm kiếm, vì tôi có sẵn cả hai thứ đó; Tôi không cài đặt Red Hat. Nhưng bạn có thể đã bỏ lỡ tầm quan trọng của những gì tôi đã nói in đậm ở trên: các chức năng trong bạn /etc/init.d/functions không tồn tại trên các bản phân phối khác. Mỗi phân phối có các quy tắc riêng cho /etc/init.dvà thư viện chức năng của nó (nếu có) được định hướng xung quanh các quy tắc đó; ví dụ, SuSE rc_status -s. Có một số chức năng "tiêu chuẩn" LSB, được cho là có trong /lib/lsb/init-functions, nhưng khách hàng của bạn có thể không chạy phân phối đã được cập nhật để cung cấp cho nó.
geekizard

15

Trong hình ảnh Docker của CentOS 7 tôi chỉ cần cài đặt gói initscriptsđể tập lệnh này được cài đặt:

yum install -y initscripts

(Nhờ vấn đề nàydocker-library mà tôi đã xem xét cam kết này )


Điều này đã khắc phục sự cố của tôi khi sử dụng Jenkins trên Fedora 24 trong thùng chứa Docker. (chỉ sử dụng dnfthay vì yumtất nhiên). Cảm ơn!
ge Muffguy

Điều này cũng hoạt động khi cài đặt MarkLogic 9 vào thùng chứa Centos7. Các tài liệu cài đặt chỉ đề cập đến việc cần lib.so.6 và lsb-core-amd64, nhưng tôi đoán vì họ đang nói về việc cài đặt trên bản cài đặt CentOS 7 đầy đủ, họ sẽ bỏ qua rằng bạn cần gói initscripts.
alc6379

12

Đó là hoàn toàn phụ thuộc phân phối. Bạn thực sự sẽ cần phải tìm ra bản phân phối để viết một tập lệnh init phù hợp chính xác.

Bạn cũng có thể làm theo đặc tả LSB (Cơ sở tiêu chuẩn Linux) và hy vọng rằng bản phân phối được đề cập cũng vậy. Đặc tả kỹ thuật hiện tại chỉ ra rằng các hàm init script tiêu chuẩn có sẵn dưới dạng /lib/lsb/init-functions( xem tài liệu ở đây ). Trên Fedora và các bản phát hành liên quan đến Red Hat khác, được cung cấp bởi redhat-lsbgói, là tùy chọn .

Vì vậy, bạn thực sự phải tìm ra những gì bạn đang nhắm mục tiêu. Lấy làm tiếc.


1

Thêm một câu trả lời gần đây

Như đã lưu ý trong các câu trả lời khác, thông số kỹ thuật cơ sở tiêu chuẩn Linux (LSB) cung cấp cách viết init.dcác tập lệnh khởi động dựa trên nền tảng độc lập , sử dụng các hàm init do LSB định nghĩa như được liệt kê ở đây

Tất cả LSB phân phối phù hợp (tất cả các công trình lớn) cung cấp các tập tin /lib/lsb/init-functions(trong đó xác định các chức năng được liệt kê) trong meta-package lsb-core-noarchcó thể được cài đặt bằng quản lý gói của phân phối $PKGMAN $INSTOPT lsb-core-noarch( yum, dnf, apt, ...).

Một ví dụ về một kịch bản init như vậy là đây .

Tuy nhiên, được đưa ra như thế nào systemdbây giờ là hệ thống quản lý dịch vụ và hệ thống thực tế cho hầu hết các bản phân phối, tốt hơn là viết một systemd service unitthay vì viết ra một initscript.


0

Tôi nhớ lại những chuỗi chức năng khi tôi chuyển sang Ubuntu, vì vậy tôi đã tạo ra một thư viện mà tái tạo chức năng của họ: efunctions .


0

Tôi cũng có lỗi tương tự trong khi tôi chạy container docker của tôi. Nó đã được sửa bằng cách thêm dòng dưới đây vào Dockerfile của tôi

RUN yum install -y initscripts
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.