tập lệnh init.d không chạy khi khởi động


15

Tôi đang lưu trữ một số máy chủ trò chơi Counter-Strike trên máy chủ chuyên dụng của mình bằng màn hình. Tôi có đoạn script này mà tôi chạy khi tôi muốn khởi động / dừng máy chủ:

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

Tôi đặt tập lệnh này (được gọi css-servers) vào /etc/init.d/và theo hiểu biết của tôi có nghĩa là nó được chạy khi hệ thống khởi động. Tuy nhiên khi tôi kiểm tra màn hình hoạt động bằng cách sử dụng screen -lsthì không có màn hình nào đang chạy.

Làm cách nào để chạy những thứ này khi khởi động trong Ubuntu Server?

Câu trả lời:


32

Chỉ có tập lệnh hiện diện /etc/init.dlà không đủ để chạy nó khi khởi động.

Để thêm nó vào phần khởi động của bạn, bạn phải nói với Ubuntu về nó:

sudo update-rc.d css-servers defaults

Sau đó, nó sẽ bắt đầu vào lần khởi động tiếp theo, nếu tập lệnh được định dạng chính xác, tập bit thực thi, v.v. Các gói bạn cài đặt từ apt-get/ Trung tâm phần mềm tự động chạy lệnh này hoặc tương đương với nó, đó là lý do tại sao bạn thường không phải lo lắng về nó.

Nếu bạn muốn bắt đầu nó ngay lập tức, bạn có thể gọi nó trực tiếp:

sudo service css-servers start

Điều này là vô cùng kỳ lạ. Cho đến thời điểm này kịch bản của tôi chạy khi khởi động mà không có update-rc.dlệnh này . Tôi đã cập nhật tập lệnh của mình sau đó nó không chạy nữa cho đến khi tôi chạy lệnh này. Cảm ơn. Nhân tiện, làm thế nào chúng ta có thể "hủy đăng ký" nó khỏi chạy khi khởi động (như chúng ta đã làm với update-rc.d)?
Nikos

1
@ Nik-Lz Câu hỏi và trả lời này đề cập đến các phiên bản cũ và lỗi thời của Ubuntu đã sử dụng mới nhất. Nó không còn được sử dụng nữa, thay vào đó systemd hiện tại (sử dụng một hệ thống dịch vụ hoàn toàn khác) nên được sử dụng.
Michael Hampton

7

Bạn đã hoàn thành phần đầu tiên. /etc/init.dlà nơi các kịch bản khởi tạo được chạy từ đó. Tuy nhiên, chúng không được chạy tự động.

Chúng được chạy theo thứ tự như được chỉ định bởi các liên kết tượng trưng các /etc/rc*.dthư mục. Mỗi cấp độ chạy có thư mục riêng. Các tập lệnh có tên liên kết bắt đầu Kđược chạy với pararmeter dừng và những tập lệnh có tên bắt đầu Sđược chạy với tham số start. Theo quy ước, tên tệp bắt đầu bằng Khoặc Stheo sau là một số có hai chữ số được sử dụng để sắp xếp thứ tự và kết thúc bằng tên của tập lệnh trong /etc/init.d.

Các liên kết có thể được tạo bằng tay, nhưng thường được tạo bằng một tập lệnh. Kịch bản chung update-rc.dcó sẵn trên Ubuntu. Lệnh man update-rc.dsẽ cung cấp cho bạn tài liệu về người sử dụng nó. Trong trường hợp của bạn hãy thử:

sudo update-rc.d css-servers defaults

Để bắt đầu sử dụng tập lệnh init, hãy thử:

sudo /etc/init.d/css-servers start

Tôi thường khởi động và dừng máy chủ theo cách này để đảm bảo tập lệnh hoạt động như mong muốn. Sau đó, tôi chạy update-rc.dđể thêm nó vào các /etc/rc.dthư mục runlevel.


1

Nếu bạn không nhận được bất kỳ manh mối nào thì tại sao dịch vụ của bạn không bắt đầu khởi động. Tuy nhiên, nó hoạt động đúng khi bạn cố gắng khởi động dịch vụ bằng tay service <your service> start. Trong trường hợp đó, hãy thử chuyển hướng đầu ra tiêu chuẩn và đầu ra lỗi sang một số tệp. Điều này có thể cung cấp cho bạn một số manh mối tại sao nó không được khởi động trong khi khởi động hệ thống.

ví dụ trong tập lệnh của bạn

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0
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.