it-mot-dan-vi.com

Làm cách nào để tạo tập lệnh trong /etc/init.d bắt đầu khi khởi động?

Tôi nghĩ rằng tôi đã đọc một cái gì đó một thời gian trước về điều này, nhưng tôi không thể nhớ nó đã được thực hiện như thế nào. Về cơ bản, tôi có một dịch vụ trong /etc/init.d mà tôi muốn bắt đầu tự động khi khởi động. Tôi nhớ nó có liên quan đến việc liên kết tập lệnh vào /etc/rc.d thư mục, nhưng tôi không thể nhớ hiện tại. Lệnh cho việc này là gì?

Tôi tin rằng tôi đang sử dụng công cụ phái sinh Fedora/CentOS.

87
Naftuli Kay

Nếu bạn đang sử dụng hệ thống dựa trên Red Hat, như bạn đã đề cập, bạn có thể thực hiện các thao tác sau:

  1. Tạo một tập lệnh và đặt vào /etc/init.d (ví dụ /etc/init.d/myscript). Kịch bản nên có định dạng sau:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

Định dạng khá chuẩn và bạn có thể xem các tập lệnh hiện có trong /etc/init.d. Sau đó, bạn có thể sử dụng tập lệnh như vậy /etc/init.d/myscript start hoặc là chkconfig myscript start. Trang man ckconfig giải thích tiêu đề của tập lệnh:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

Ví dụ bắt đầu, dừng và mã trạng thái sử dụng các hàm trợ giúp được xác định trong /etc/init.d/functions

  1. Kích hoạt tập lệnh

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Kiểm tra tập lệnh thực sự được bật - bạn sẽ thấy "bật" cho các cấp độ bạn đã chọn.

    $ chkconfig --list | grep myscript
    
115
canen

Bạn kiểm tra, những gì runlevel máy của bạn thường bắt đầu vào.

runlevel

Thường thì đây là 5 hoặc 2 - có nhiều quy ước khác nhau, nhưng không có gì thực sự được thiết lập, afaik. Ubuntu sử dụng 2, trong khi phân phối cũ tôi đã sử dụng luôn được sử dụng

  • 1 Người dùng đơn (siêu người dùng)
  • 2 người dùng
  • 3 người dùng + mạng
  • 4 không sử dụng/người dùng có thể xác định
  • 5 người dùng, mạng + X11

Sau đó, bạn tạo một liên kết tượng trưng từ tập lệnh init của bạn, có thể /etc/init.d/foobar đến /etc/rc2.d/SXYfoobar

S có nghĩa là 'Bắt ​​đầu tập lệnh này trong runlevel này (ở đây: 2). XY là một số thập phân có hai chữ số, có liên quan đến chuỗi, các tập lệnh được bắt đầu.

Nếu bạn phụ thuộc vào tập lệnh S45barfoo để chạy trước bạn và S55foustoo tùy thuộc vào tập lệnh của bạn, bạn sẽ chọn xy trong khoảng từ 45 đến 55. Đối với các số bằng nhau, thứ tự khởi động không xác định.

Trong khi đó, Ubuntu đã chuyển (đang chuyển đổi) sang một quy trình khởi động khác, được gọi là upstart.

Và lưu ý: Không phải lúc nào các liên kết liên kết đến /etc/rcX.d - đôi khi nó là /etc/init/rcX.d hoặc một cái gì đó tương tự, nhưng nó phải dễ tìm, ở đâu đó bên dưới/vv.

Nếu bạn muốn bắt đầu một cái gì đó ở cuối tập lệnh bắt đầu, /etc/rc.local sẽ là tệp cần tìm, nhưng nếu nó phụ thuộc vào X11 đã chạy, bạn có thể tìm tùy chọn tự khởi động của môi trường máy tính để bàn của mình hoặc /etc/X11/Xsession.d/ với một mô hình tương tự như mô tả ở trên.

Nếu bạn phụ thuộc vào mạng đang hoạt động, có một thư mục riêng (if-up.d) và dành cho các thiết bị được gắn kết như ổ USB ngoài /etc/udev/rules.d/.

10
user unknown

Như Naftuli Tzvi Kay đã hỏi về Debian ở trên: Bắt đầu với Debian 6, tập lệnh của bạn phải chứa tiêu đề LSB (Cơ sở tiêu chuẩn Linux) cho biết các phụ thuộc và khả năng của nó ( xem trang wiki debian ).

Nếu có tiêu đề LSB, bạn có thể sử dụng insserv để đưa tập lệnh của mình vào quá trình khởi động ( xem trang wiki debian khác ).

3
mdt