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 的优秀介绍页面。
对于 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)
| 归档时间: |
|
| 查看次数: |
153713 次 |
| 最近记录: |