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


17

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

具体来说,我已经使用了可以在启动时成功运行的openvpn服务,但是一些教程说我应该将文件共享程序的服务绑定到vpn本身,这样,如果vpn掉线了,那么文件共享服务也就可以了。但是我认为也许我的vpn的自动运行使事情变得复杂了,我应该禁用它或修改其启动方式。但是如何检查?

Answers:


23

我假设您有一个使用树莓派的Raspberry,据我所知,该树莓还没有转向systemd。在这种情况下,答案如下。

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

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

  sudo service --status-all

您将获得类似以下的列表:

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

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

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

 # The default runlevel.
 id:2:initdefault:

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

 # runlevel
 N 2

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

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

单个用户(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

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

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

SYSTEMD

列出所有服务的命令是

systemctl list-unit-files

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

 systemctl list-unit-files | grep enabled 

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

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

systemctl list-unit-files --type=target

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

$ systemctl get-default
  graphical.target

有关更多信息,您可以阅读DigitalOcean的出色介绍页


Raspbian Jessie使用systemd,但此答案似乎仍然有效。
ZX9

1
@ ZX9感谢您引起我的注意,我为systemd添加了编辑。
MariusMatutiae '16

8

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

安装工具

sudo apt-get install rcconf

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

sudo rcconf

这不能回答OP,后者是(我引用):如何确定启动时在Raspberry Pi上运行的服务?(树莓派)
MariusMatutiae

@MariusMatutiae这样做,因为它rcconf告诉您是否启用了服务。我编辑了答案,以明确地说该工具显示了这种特定类型的信息。
jjurm

3
sudo nano /etc/rc.local

在此处插入批处理文件或命令以在启动时运行。我也自动在启动时运行Openvpn :)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.