Làm cách nào để tìm hiểu các tập lệnh /etc/init.d được tải trên Debian?


13

Tôi muốn chạy một kịch bản sysvinit trước một kịch bản khác và tìm ra cách để làm điều đó.

Để chắc chắn, điều này thực sự xảy ra theo thứ tự tôi thích, tôi muốn xem một danh sách, theo thứ tự xảy ra.

Tôi sudo insserv --showallđã tìm thấy rồi, nhưng không thể tạo ra đầu hoặc đuôi của nó, vì nó liệt kê các tập lệnh init nhiều lần.

Làm cách nào để tìm hiểu các tập lệnh /etc/init.d được tải trên Debian?


Người sử dụng BusyBox đến ở bài này: unix.stackexchange.com/questions/59018/... Lưu ý những nhận xét "thực hiện chúng theo thứ tự số"
dtmland

Câu trả lời:


9

Có một số tệp trong thư mục /etc/init.d/:

$ ls -al /etc/init.d/ | grep -i depend
-rw-r--r--   1 root root  2739 Feb 17 05:20 .depend.boot
-rw-r--r--   1 root root  2221 Feb 17 05:20 .depend.start
-rw-r--r--   1 root root  1855 Feb 17 05:20 .depend.stop

Bất cứ khi nào bạn chạy update-rc.dcác tập tin sẽ thay đổi. .depend.boottập tin là cho Scấp độ, .depend.startlà cho 2 3 4 5cấp độ và .depend.stopcho 0 1 6.

Trong trường hợp của tôi, tôi có thứ tự sau .depend.start:

TARGETS = killprocs motd nvidia-kernel nfs-common rsyslog privoxy virtualbox
linuxlogo acpi-fakekey binfmt-support fancontrol openvpn hddtemp cgconfig 
dropbox-container dbus dnscrypt-proxy pulseaudio atd cryptmount exim4 
qbittorrent-nox ddclient acpi-support smartmontools ssh ntp loadcpufreq acpid 
cron rsync cgrulesengd cpufrequtils bootlogs bootchart-done single rmnologin 
rc.local stop-bootlogd

Bạn cũng có thể thấy lý do tại sao thứ tự trình bày theo cách bạn nhìn thấy ở trên. Mỗi dòng tiếp theo trông như thế này:

cgrulesengd: rsyslog cgconfig

có nghĩa là cgrulesengdcần rsyslog cgconfigphải được bắt đầu trước.


4

Đối với mỗi runlevel (0 6) có một thư mục /etc/rc[N[.d

Trong mỗi thư mục đều có liên kết tượng trưng bắt đầu bằng chữ "S" hoặc với chữ K Kiêu. "S" để bắt đầu "K" dừng lại. Các tập lệnh được thực thi theo cách sắp xếp từ vựng của tên tệp , nói cách khác, S10script sẽ được thực thi trước hơn S20myscript. Ví dụ :

chúng ta có hai tập lệnh đơn giản, tập lệnh second.sh phải được thực thi sau tập lệnh fist.sh trong runlevel hiện tại.

    root@localhost init.d]# cat /etc/init.d/first.sh 
    #!/bin/bash
    #
    echo 'I am the first'  >> /var/log/messages

    root@localhost init.d]# cat /etc/init.d/second.sh   
    #!/bin/bash
    #
    echo 'I am the second'  >> /var/log/messages

Trình độ hiện tại của tôi là gì?

    [root@localhost init.d]# runlevel 
    N 5

Bây giờ chúng ta cần một liên kết tượng trưng bắt đầu là S (N) myScript cho mysecondScript đầu tiên và S (N + 1):

    root@localhost rc5.d]# ln -s /etc/init.d/first.sh /etc/rc5.d/S1first
    root@localhost rc5.d]# ln -s /etc/init.d/second.sh /etc/rc5.d/S2second

Chúng tôi có thể khởi động lại và kiểm tra nhật ký tin nhắn:

    [root@localhost ~]# cat /var/log/messages | grep "I am" -A 1 -B 1
    Dec 13 13:53:36 localhost rpc.statd[3468]: Version 1.0.9 Starting
    I am the first
    Dec 13 13:53:37 localhost hcid[3532]: Bluetooth HCI daemon
    --
    Dec 13 13:53:40 localhost automount[3689]: lookup_read_master:       lookup(nisplus): couldn't locate nis+ table auto.master
    I am the second
    Dec 13 13:53:41 localhost gpm[3785]: *** info [startup.c(95)]: 

Đã thử nghiệm trên Centos5 cũ


Tôi khuyên bạn nên sử dụng / usr / bin / logger để thêm vào nhật ký hệ thống thay vì chuyển hướng, do đó bạn không vô tình viết ">" một cách tình cờ một ngày và xóa sạch nhật ký của bạn.
DanB
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.