![如何判断 Raspberry Pi 启动时运行哪些服务?(raspbian)](https://linux22.com/image/1434045/%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%20Raspberry%20Pi%20%E5%90%AF%E5%8A%A8%E6%97%B6%E8%BF%90%E8%A1%8C%E5%93%AA%E4%BA%9B%E6%9C%8D%E5%8A%A1%EF%BC%9F%EF%BC%88raspbian%EF%BC%89.png)
我有一些在启动时运行的服务,但我实际上忘记了如何设置它们!如果我想更改它们的活动,我该怎么做?例如,也许我想禁用服务在启动时启动,或者也许我想使用其他方法启动它。
具体来说,我有一个在启动时成功运行的 openvpn 服务,但一些教程说我应该将文件共享程序的服务与 vpn 本身绑定,这样如果 vpn 出现故障,文件共享服务也会出现故障。但我认为我的 vpn 的自动运行可能使事情变得复杂,我应该禁用它或修改它的启动方式。但如何检查呢?
答案1
我假设你有一个使用 raspian 的 Raspberry,据我所知,它还没有转移到systemd。本例中答案如下。
编辑:对于 systemd(Jessie 或更高版本),请参见底部。
首先,你可以确定哪个系统是现在通过以下命令运行:
sudo service --status-all
您将获得类似这样的列表:
[ + ] triggerhappy
[ + ] udev
[ ? ] udev-mtab
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ - ] urandom
[ + ] vsftpd
[ + ] weewx
[ - ] x11-common
这+指示服务正在运行,-的服务不是跑步,?的不允许的服务地位作为可能的命令:它们大多是不需要一直运行的命令,只是偶尔运行。
回到你的问题,你需要理解运行级别Linux 中的运行级别。运行级别 (0-6 + S) 标识哪些服务可以/必须运行。引导顺序从初始运行级别(在/etc/inittab在我的 Raspberry 中
# 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/,其中保存了用于标识各种服务的文件。 上述行标识了每个服务要启动的运行级别。 如果服务在运行级别 N 启动,则当系统进入 N+1 时,无需再次启动该服务,但如果发现该服务未运行,则会启动该服务。
这让您准确了解服务启动的不同阶段。但在同一运行级别中,Required-Start 和 Should-Start 行定义了相关服务的硬依赖关系和软依赖关系,IE服务必须运行并应该在被检查的服务之前运行。如果没有必启动服务,相关服务将失败;如果没有应启动服务,则不会出现一般性失败,可能只是缺少一些有用的功能。使用必停止和应停止时也会发生同样的情况。
系统管理:
列出所有服务的命令是
systemctl list-unit-files
将会显示很多信息。要选择所有服务已启用,IE,那些在启动时启动的,只需 grep 上述命令如下:
systemctl list-unit-files | grep enabled
我更喜欢这个命令systemctl 列表单位:不同之处在于,这个只会显示你的操作系统内存中的服务(操作系统认为它需要的服务),而systemctl 列表单元文件将显示全部已安装的服务,包括蒙面(IE那些永远不应该启动的,甚至手动启动的),以及那些它将不是激活,这被称为静止的换句话说,我建议的命令比仅列出的命令更全面积极的服务。
注意::systemd 与以前的 init 系统有很大不同。特别是,它没有运行级别, 但目标。运行级别由于兼容性原因仍然存在,并且可以通过列出所有可用目标来将其视为特定目标
systemctl list-unit-files --type=target
你可以通过以下方式查看当前目标
$ systemctl get-default
graphical.target
有关更多信息,您可以阅读DigitalOcean 出色的介绍页面。
答案2
对于 Raspberry Pi 上的简单启动服务管理,我推荐工具rcconf
。它允许您轻松打开/关闭服务/etc/init.d/
。您还可以查看它们是否已启用并会在启动时运行。
安装该工具
sudo apt-get install rcconf
使用文本用户界面非常简单
sudo rcconf
答案3
sudo nano /etc/rc.local
您可以在此处插入要在启动时运行的批处理文件或命令。我也会在启动时自动运行 Openvpn :)