Làm thế nào để thêm một kịch bản để khởi động và tắt máy trong debian?


12

tiêu đề khá nhiều tổng hợp nó lên.

Làm cách nào để thêm startup.sh và shutdown.sh của ứng dụng máy chủ của tôi vào chuỗi khởi động và tắt máy của HĐH Debian?

Câu trả lời:


15

Trên Debian, các tập lệnh khởi động và tắt ứng dụng và dịch vụ nên được đặt vào /etc/init.d/.

Debian cung cấp một tập lệnh mẫu /etc/init.d/skeletonmà bạn có thể sửa đổi theo sở thích của mình cho ứng dụng cụ thể của bạn.

Khi đã có, hãy gọi:

# update-rc.d YOURAPP defaults

Để có Debian thêm các /etc/rc?.d/liên kết tượng trưng cho bạn.

Nếu bạn thích một menu hoặc giao diện đồ họa, hãy xem sysv-rc-confhoặc ksysvgói.


4

Bạn có thể gọi tập lệnh của mình từ /etc/rc.local , trước dòng có thông báo thoát 0

Đối với việc tắt ứng dụng của bạn, tôi khuyên bạn nên đặt một tập lệnh trong /etc/rc0.d . Bạn cần đặt tên bằng chữ hoa K và sau đó là số có 2 chữ số chỉ định thứ tự các tập lệnh này được chạy và sau đó là tên. Nó sẽ được gọi với một tham số "dừng", nhưng bạn có thể bỏ qua điều này cho một tập lệnh dừng đơn giản.


Tại sao bạn lại loay hoay với RC.local khi bạn đã phải nghịch ngợm với /etc/rcX.d?
womble

RC.local là nơi thích hợp cho các công cụ khởi động đơn giản - không cần phải xử lý các tham số bắt đầu / dừng, v.v. Nhưng nó không có khả năng tắt một quy trình. Các công cụ RC0.d là một chút của một hack.
Brent

3

Đối với khởi nghiệp có một cái nhìn về điều này .

Để tắt máy, hãy tạo một liên kết / sao chép tập lệnh của bạn vào một trong các thư mục /etc/rcX.d trong đó X là runlevel mà bạn muốn nó thực thi tại. Tôi tin rằng 0 là runlevel cho Debian.


Đây là thông tin tắt máy tôi cần. Cảm ơn vì điều này, @squillman.
harperville

1

Đơn giản nhất là sửa đổi các tập lệnh hiện có, hoạt động trong hệ thống của tôi, được sử dụng cho âm thanh :)

  • khởi động, sửa đổi /etc/init.d/rc.local, thêm sh của bạn vào cuối tập tin, trước: (nó sẽ thực thi nó ngay trước khi đăng nhập "màn hình")
  • tắt máy, sửa đổi /etc/init.d/halt, thêm sh của bạn vào đầu tệp, ngay sau khi nhận xét ban đầu (nó sẽ được thực thi trước lệnh tắt máy thực tế, được gọi bởi tệp script này
  • khởi động lại, giống như tắt máy, nhưng trong /etc/init.d/reboot

1

Kể từ Debian Jessie, initchương trình cũ đã được thay thế bởi systemd!

Kiểm tra nó ra cho mình. Chạy: ls -l /sbin/initvà xem những gì nó chỉ vào. Ngày nay, nó trỏ đến systemd( /sbin/init -> /lib/systemd/systemd), một chương trình khởi tạo mới hơn và tốt hơn.


VÌ VẬY CHOSEN VÀ TRẢ LỜI KHÁC TẠI ĐÂY BÂY GIỜ BÂY GIỜ !!!


* Mặc dù bạn vẫn có thể cài đặt các tập lệnh theo cách cũ với các công cụ System-V, nhưng nói chung không phải là một ý tưởng hay.

man systemd.service nói:*

Nếu một dịch vụ được yêu cầu dưới một tên nhất định nhưng không tìm thấy tệp cấu hình đơn vị nào, systemd sẽ tìm tập lệnh init SysV có cùng tên ... và tự động tạo một đơn vị dịch vụ từ tập lệnh đó. Điều này rất hữu ích để tương thích với SysV. Lưu ý rằng khả năng tương thích này khá toàn diện nhưng không phải là 100%.


Đối với các hệ thống Debian mới hơn (ví dụ: Jessie, Stretch, Buster, v.v ...)

Nó dễ hơn bạn nghĩ. (-:

Đây là phương pháp mới và được ưa thích để cài đặt các chương trình khởi động hoặc tắt máy.

Với systemdbạn đầu tiên muốn tạo một tập tin đơn vị . Một tập tin đơn vị chủ yếu là khai báo, không phải mã.

Sau đó, bạn sẽ sử dụng systemctllệnh để kích hoạt hoặc bắt đầu đơn vị đó.

systemdchẳng hạn như rất nhiều công việc cho bạn, làm cho nó dễ dàng, chẳng hạn, để một chương trình quan trọng tự động khởi động lại nếu nó gặp sự cố hoặc bị giết. Ngoài ra, nó tắt chương trình của bạn ở đâu và khi nào nó nên mặc định mà không có công việc phụ từ phía bạn.


Bắt đầu tìm hiểu về systemdđây:

Từ Debianở những nơi khácvvvv .


Trang con người để bắt đầu với:

man systemd.unit - Giới thiệu về tệp đơn vị nói chung
man systemd.service - Giới thiệu về tệp đơn vị dịch vụ, ví dụ: trình nền và các chương trình chạy đơn.

man systemctl - Giao diện người dùng dòng lệnh
man journalctl- Xem nhật ký của những gì systemd đã làm

man systemd - Về chính chương trình init


Ngoài ra còn có một loạt các loại đơn vị khác, ví dụ

man systemd.target - cho các nhóm và các mục tiêu được đồng bộ hóa phổ biến.

Khi bạn đã tiêu hóa những điều cơ bản ở trên, sau đó man -k systemdtìm hiểu thêm về các trang hướng dẫn khác.



Dù bạn làm gì, trên Debian không sử dụng bất kỳ thứ nào trong số này :

  • update-rc.d - cài đặt và xóa liên kết tập lệnh init kiểu System-V
  • sysv-rc-conf - Cấu hình cấp chạy cho SysV như liên kết init script
  • runlevel - In runlevel SysV trước và hiện tại
  • BUM- B oot U p M anager - trình chỉnh sửa runlevel đồ họa
  • systemadm- Giao diện đồ họa cho hệ thống quản lý dịch vụ và hệ thống
    (BTW, tác giả đã nói với tôi qua email rằng bây giờ nó đã quá hỏng.)


MỘT VÍ DỤ:

Tệp đơn vị này khởi động trình nền NoIP.com khi tôi khởi động và tắt nó khi tôi tắt máy.

Đôi khi, daemon này gửi địa chỉ IP hiện tại của tôi để cập nhật cơ sở dữ liệu của nhà cung cấp DDNS ( D ynamic DNS ( D omain N ame S erver)), do đó giữ cho tên miền của tôi trỏ vào máy tính của tôi bất cứ nơi nào nó di chuyển đến.

Tệp đơn vị này nằm trên hệ thống của tôi trong tệp cài đặt này: /etc/systemd/system/noip2.service

Đây là những gì trong tập tin đơn vị:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Chạy thủ công một tệp đơn vị, (ví dụ để kiểm tra):

  • bắt đầu với $ sudo systemctl start noip2.
  • khởi động lại với $ sudo systemctl restart noip2.
  • dừng với $ sudo systemctl stop noip2.

Cấu hình hệ thống để tự động chạy tệp đơn vị khi khởi động hoặc tắt:

  • bắt đầu sử dụng với $ sudo systemctl enable noip2.
  • kết thúc sử dụng với $ sudo systemctl disable noip2.

Xem nhật kí

  • $ sudo journalctl -u noip2
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.