如何判断哪些服务在 Raspberry Pi 上启动时运行?(树莓派)

use*_*186 20 linux debian openvpn raspberry-pi

我有一些在启动时运行的服务,但我实际上忘记了我是如何设置它们的!如果我想改变他们的活动,我该怎么做?例如,也许我想禁止服务在启动时启动,或者我想使用不同的方法启动它。

具体来说,我使用了在启动时成功运行的 openvpn 服务,但一些教程说我应该将文件共享程序的服务与 vpn 本身联系起来,这样如果 vpn 出现故障,那么文件共享服务也会出现故障。但我认为我的 vpn 的自动运行可能使事情复杂化,我应该禁用它或修改它的启动方式。但是怎么查呢?

Mar*_*iae 28

我假设您有一个使用 raspian 的 Raspberry,据我所知,它还没有转移到systemd。在这种情况下,答案如下。

编辑:对于 systemd(Jessie 或更高版本),请参见底部

首先,您可以通过以下命令确定当前正在运行的系统:

  sudo service --status-all
Run Code Online (Sandbox Code Playgroud)

你会得到一个有点像这样的列表:

  [ + ]  triggerhappy
  [ + ]  udev
  [ ? ]  udev-mtab
  [ ? ]  umountfs
  [ ? ]  umountnfs.sh
  [ ? ]  umountroot
  [ - ]  urandom
  [ + ]  vsftpd
  [ + ]  weewx
  [ - ]  x11-common
Run Code Online (Sandbox Code Playgroud)

+的显示服务运行时,-'s服务运行时,?的服务,不允许状态为可能的命令:他们大多不需要运行所有的时间命令,只是偶尔为之。

回到你的问题,你需要了解Linux 中的runlevel。运行级别 (0-6 + S) 标识可以/必须运行哪些服务。启动序列从初始运行级别(在/etc/inittab 中指定,在我的 Raspberry

 # The default runlevel.
 id:2:initdefault:
Run Code Online (Sandbox Code Playgroud)

此行将其标识为 2,然后进入发行版标准最终运行级别(从 2 到 5)。您可以通过以下命令识别当前的运行级别

 # runlevel
 N 2
Run Code Online (Sandbox Code Playgroud)

(就我而言,是无头服务器)。其他运行级别是(同样来自 é/etc/inittab*):

 # Runlevel 0 is halt.
 # Runlevel 1 is single-user.
 # Runlevels 2-5 are multi-user.
 # Runlevel 6 is reboot.
Run Code Online (Sandbox Code Playgroud)

单个用户 (1) 通常也标识为 S。

在正常引导中,因此您从 2 开始,并进展到 5。要查找在此进展中启动的服务,请发出以下命令:

 # 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
Run Code Online (Sandbox Code Playgroud)

这将打印/etc/init.d/中所有文件中以Default-Start开头的行,该行是保存标识各种服务的文件的位置。有问题的行标识了要启动每个服务的运行级别。如果一个服务在运行级别 N 启动,当系统进展到 N+1 时它不需要再次启动,但如果它发现没有运行它就会启动。

这使您可以准确了解服务启动的不同阶段。但是在同一个运行级别中,Required-Start 和 Should-Start 行定义了相关服务的硬依赖和软依赖,服务必须运行并且应该在被检查的服务之前运行。如果没有Required-Start 服务,有问题的服务将失败,如果没有Should-Start 服务,则不会出现一般故障,可能只是缺少一些有用的功能。使用Required-Stop 和Should-Stop 停止时也会发生同样的情况。

系统

列出所有服务的命令是

systemctl list-unit-files
Run Code Online (Sandbox Code Playgroud)

这会吐出很多信息。要选择所有已启用的服务,那些在启动时启动的服务,只需按如下所示 grep 上面的命令:

 systemctl list-unit-files | grep enabled 
Run Code Online (Sandbox Code Playgroud)

systemctl list-units 相比,我更喜欢这个命令:不同之处在于,这个命令只会显示您的操作系统在内存中的服务 = 操作系统认为它需要),而systemctl list-unit-files将显示所有已安装的服务,包括那些屏蔽的那些应该永远不会启动的,甚至不能手动启动的),以及那些不会激活的,称为静态的。换句话说,我建议的命令比仅列出活动服务的命令更全面。

注意:systemd 与以前的 init 系统有很大不同。特别是,它没有runlevels,而是targets。出于兼容性原因,运行级别仍然存在,并且可以通过列出所有可用目标将其视为特定目标

systemctl list-unit-files --type=target
Run Code Online (Sandbox Code Playgroud)

而您可以通过以下方式查看当前目标

$ systemctl get-default
  graphical.target
Run Code Online (Sandbox Code Playgroud)

有关这方面的更多信息,您可以阅读DigitalOcean 的优秀介绍页面

  • @ZX9 感谢您让我注意这篇旧文章,我已经添加了对 *systemd* 的编辑。 (2认同)

jju*_*urm 8

对于 Raspberry Pi 上的简单启动服务管理,我推荐工具rcconf. 它允许您轻松地打开/关闭/etc/init.d/. 您还可以查看它们是否已启用并将在启动时运行。

安装工具

sudo apt-get install rcconf
Run Code Online (Sandbox Code Playgroud)

与文本 UI 一起使用非常简单

sudo rcconf
Run Code Online (Sandbox Code Playgroud)