Làm thế nào để biết dịch vụ nào chạy khi khởi động trên Raspberry Pi? (mâm xôi)


17

Tôi có một số dịch vụ chạy khi khởi động nhưng tôi thực sự đã quên cách tôi thiết lập chúng! Nếu tôi muốn thay đổi hoạt động của họ, làm thế nào tôi có thể làm điều đó? Chẳng hạn, có thể tôi muốn vô hiệu hóa một dịch vụ bắt đầu khi khởi động hoặc có thể tôi muốn bắt đầu sử dụng một phương thức khác.

Cụ thể, tôi đã sử dụng dịch vụ openvpn chạy thành công khi khởi động nhưng một số hướng dẫn nói rằng tôi nên kết nối dịch vụ chia sẻ tệp với chính vpn để nếu vpn ngừng hoạt động thì dịch vụ chia sẻ tệp cũng vậy. Nhưng tôi nghĩ có lẽ việc tự động chạy vpn của tôi đang làm phức tạp mọi thứ và tôi nên vô hiệu hóa nó hoặc sửa đổi cách nó khởi chạy. Nhưng làm thế nào để kiểm tra?

Câu trả lời:


23

Tôi giả sử bạn có Raspberry bằng raspian, theo hiểu biết tốt nhất của tôi, vẫn chưa chuyển sang systemd . Trong trường hợp này, câu trả lời như sau.

EDIT: cho systemd (Jessie trở lên), xem ở phía dưới .

Đầu tiên, bạn có thể xác định hệ thống nào hiện đang chạy bằng lệnh:

  sudo service --status-all

Bạn sẽ nhận được một danh sách như thế này:

  [ + ]  triggerhappy
  [ + ]  udev
  [ ? ]  udev-mtab
  [ ? ]  umountfs
  [ ? ]  umountnfs.sh
  [ ? ]  umountroot
  [ - ]  urandom
  [ + ]  vsftpd
  [ + ]  weewx
  [ - ]  x11-common

Các + 's cho thấy dịch vụ đang chạy, các -'s dịch vụ không chạy, ?' S dịch vụ mà không cho phép tình trạng như một lệnh có thể: họ chủ yếu là lệnh mà không cần phải chạy tất cả các thời điểm đó, chỉ thỉnh thoảng.

Để quay lại câu hỏi của bạn, bạn cần hiểu runlevel s trong Linux. Runlevels (0-6 + S) xác định dịch vụ nào có thể / phải được chạy. Trình tự khởi động tiến triển từ một runlevel ban đầu (được chỉ định trong / etc / inittab , trong Raspberry của tôi

 # The default runlevel.
 id:2:initdefault:

dòng này xác định nó là 2, và sau đó tiến tới runlevel tiêu chuẩn cuối cùng của bạn (từ 2 đến 5). Bạn xác định runlevel hiện tại của bạn bằng lệnh

 # runlevel
 N 2

(trong trường hợp của tôi, một máy chủ không đầu). Các runlevels khác là (một lần nữa từ é / etc / inittab *):

 # Runlevel 0 is halt.
 # Runlevel 1 is single-user.
 # Runlevels 2-5 are multi-user.
 # Runlevel 6 is reboot.

Người dùng đơn (1) cũng thường được xác định là S.

Trong một khởi động bình thường, do đó bạn bắt đầu từ 2 và tăng lên 5. Để tìm các dịch vụ bắt đầu trong tiến trình này, hãy đưa ra lệnh:

 # grep -nrI Default-Start /etc/init.d
 umountroot:7:# Default-Start:
 checkroot.sh:8:# Default-Start:     S
 kbd:6:# Default-Start:     S
 isc-dhcp-server:11:# Default-Start:     2 3 4 5
 mountkernfs.sh:7:# Default-Start:     S
 hostname.sh:7:# Default-Start:     S
 mountnfs.sh:7:# Default-Start:     S
 halt:6:# Default-Start:
 dphys-swapfile:20:# Default-Start:     2 3 4 5
 bootlogs:7:# Default-Start:     1 2 3 4 5
 rc.local:6:# Default-Start:     2 3 4 5
 hostapd:9:# Default-Start:      2 3 4 5
 keyboard-setup:8:# Default-Start:     S
 lightdm:7:# Default-Start:     2 3 4 5
 procps:11:# Default-Start:     S
 mysql:9:# Default-Start:     2 3 4 5
 single:6:# Default-Start:     1
 vsftpd:7:# Default-Start:       2 3 4 5
 samba:7:# Default-Start:     2 3 4 5
 mountall.sh:6:# Default-Start:     S
 weewx:20:# Default-Start:     2 3 4 5
 umountnfs.sh:7:# Default-Start:
 triggerhappy:6:# Default-Start:     2 3 4 5
 ifplugd:24:# Default-Start:     2 3 4 5
 alsa-utils:9:# Default-Start:     S
 bootmisc.sh:7:# Default-Start:     S
 sendsigs:6:# Default-Start:
 console-setup:7:# Default-Start:     S
 nfs-common:7:# Default-Start:     2 3 4 5 S
 checkroot-bootclean.sh:6:# Default-Start:     S
 rsyslog:7:# Default-Start:     2 3 4 5
 x11-common:7:# Default-Start:     S
 mountdevsubfs.sh:7:# Default-Start:     S
 cron:10:# Default-Start:     2 3 4 5
 mountnfs-bootclean.sh:6:# Default-Start:     S
 mountall-bootclean.sh:6:# Default-Start:     S
 screen-cleanup:11:# Default-Start:     S
 udev:6:# Default-Start:     S
 ssh:7:# Default-Start:  2 3 4 5
 haveged:8:# Default-Start:     2 3 4 5
 hwclock.sh:26:# Default-Start:     S
 plymouth:9:# Default-Start:     2 3 4 5
 motd:7:# Default-Start:     1 2 3 4 5
 killprocs:6:# Default-Start:     1
 networking:6:# Default-Start:     S
 fake-hwclock:9:# Default-Start:     S
 udev-mtab:6:# Default-Start:     S
 apache2:6:# Default-Start:     2 3 4 5
 reboot:6:# Default-Start:
 umountfs:6:# Default-Start:
 plymouth-log:9:# Default-Start: S
 openvpn:11:# Default-Start:     2 3 4 5
 kmod:8:# Default-Start:     S
 ntp:7:# Default-Start:   2 3 4 5
 rpcbind:9:# Default-Start:     S 2 3 4 5
 urandom:6:# Default-Start:     S
 rmnologin:6:# Default-Start:     2 3 4 5
 checkfs.sh:7:# Default-Start:     S
 sudo:8:# Default-Start:     2 3 4 5
 mtab.sh:6:# Default-Start:     S
 dbus:6:# Default-Start:     2 3 4 5
 rsync:8:# Default-Start:     2 3 4 5

Thao tác này sẽ in dòng bắt đầu bằng Mặc định-Bắt đầu trong tất cả các tệp trong /etc/init.d/ , đây là nơi lưu giữ các tệp xác định các dịch vụ khác nhau. Dòng trong câu hỏi xác định runlevel nơi mỗi dịch vụ sẽ được bắt đầu. Nếu một dịch vụ được bắt đầu tại runlevel N, khi hệ thống tiến tới N + 1, nó không cần phải bắt đầu lại, nhưng nếu nó không chạy thì nó được khởi động.

Điều này cung cấp cho bạn một ý tưởng chính xác về các giai đoạn khác nhau mà các dịch vụ được bắt đầu. Nhưng trong cùng một runlevel, các dòng Bắt buộc và Bắt đầu nên bắt đầu xác định các phụ thuộc cứng và mềm cho dịch vụ đang được đề cập, tức là các dịch vụ phải chạy và nên chạy trước khi dịch vụ được kiểm tra. Nếu không có các dịch vụ Bắt đầu, dịch vụ được đề cập sẽ thất bại, nếu không có các dịch vụ Nên bắt đầu thay vào đó sẽ không có lỗi chung, có thể chỉ là thiếu một số tính năng hữu ích. Điều tương tự xảy ra khi dừng với Bắt buộc-Dừng và Nên dừng.

HỆ THỐNG :

Lệnh liệt kê tất cả các dịch vụ là

systemctl list-unit-files

Nó sẽ nhổ ra nhiều thông tin. Để chọn tất cả các dịch vụ được kích hoạt , tức là những dịch vụ được khởi động khi khởi động, chỉ cần grep lệnh trên như sau:

 systemctl list-unit-files | grep enabled 

Tôi thích lệnh này hơn cho các đơn vị danh sách systemctl : sự khác biệt là lệnh này sẽ chỉ hiển thị các dịch vụ mà HĐH của bạn có trong bộ nhớ = HĐH nghĩ rằng nó cần), trong khi các tệp đơn vị danh sách systemctl sẽ hiển thị tất cả các dịch vụ đã cài đặt, bao gồm cả các dịch vụ được cài đặt bịt mặt ( tức là những thứ được cho là không bao giờ được khởi động, thậm chí không phải bằng tay) và những thứ mà nó sẽ không kích hoạt, được gọi là tĩnh . Nói cách khác, lệnh tôi đề xuất là toàn diện hơn so với lệnh chỉ liệt kê các dịch vụ đang hoạt động .

NB : systemd rất khác với các hệ thống init trước. Đặc biệt, nó không có runlevel , nhưng mục tiêu . runlevels vẫn tồn tại vì lý do tương thích và có thể được xem là mục tiêu cụ thể bằng cách liệt kê tất cả các mục tiêu có sẵn thông qua

systemctl list-unit-files --type=target

trong khi bạn có thể thấy mục tiêu hiện tại của mình bằng phương tiện

$ systemctl get-default
  graphical.target

Để biết thêm về điều này, bạn có thể đọc trang giới thiệu tuyệt vời của DigitalOceans .


Raspbian Jessie sử dụng systemd, nhưng câu trả lời này dường như vẫn hoạt động.
ZX9

1
@ ZX9 Cảm ơn bạn đã gọi sự chú ý của tôi đến bài viết cũ này, tôi đã thêm một chỉnh sửa cho systemd .
MariusMatutiae

8

Để quản lý dịch vụ khởi động đơn giản trên Raspberry Pi, tôi khuyên dùng công cụ này rcconf. Nó cho phép bạn dễ dàng bật / tắt dịch vụ /etc/init.d/. Bạn cũng có thể xem nếu chúng được kích hoạt và sẽ chạy khi khởi động.

Để cài đặt công cụ

sudo apt-get install rcconf

Và rất đơn giản để sử dụng nó với giao diện người dùng văn bản

sudo rcconf

Điều này không trả lời OP, mà (và tôi trích dẫn): Làm thế nào để biết dịch vụ nào chạy khi khởi động trên Raspberry Pi? (mâm xôi) .
MariusMatutiae

@MariusMatutiae Nó, vì rcconfcho bạn biết liệu một dịch vụ có được kích hoạt hay không. Tôi đã chỉnh sửa câu trả lời để nói rõ ràng rằng công cụ hiển thị loại thông tin đặc biệt này.
jjurm

3
sudo nano /etc/rc.local

Đây là nơi bạn chèn tệp bó hoặc lệnh để chạy khi khởi động. Tôi cũng tự động chạy Openvpn khi khởi động :)

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.