linux - 了解 Bash 初始化脚本启动/停止/重新启动/

标签 linux bash

我们可以在/etc/rc.d/init.d/文件夹下提供很多服务(bash 脚本)。它们看起来都是这样的:

case "$1" in 
start)   echo "start" ;;
stop)    echo "stop" ;;
restart) echo "restart" ;;
esac

我只是不明白我们启动计算机时,内核如何调用这些启动脚本并传入参数“start” 或者当服务死掉时,谁调用脚本并传入参数“restart”

有人可以向我解释一下吗?

提前致谢。

最佳答案

这取决于您的发行版/版本/配置选择。 对于具有 System V 风格的启动文件的 Debian,请查看 http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit

粗略地说,每个运行级别都有一个目录,例如级别 2 的/etc/rc2.d,包含/etc/init.d 中常规文件(脚本)的符号链接(symbolic link)

在某个时间点,当进入级别 2 时,将运行以下脚本循环

for s in /etc/rc2.d/S* 
do
   $s start
done

开始执行名称以 S 开头的所有链接(按字母顺序排列)。实际上S后面跟着两位数字,指定执行顺序。

离开运行级别时,K* 文件的想法相同。

现在回到你的问题:这是/etc/inittab 文件中某些行的工作

# The default runlevel.
id:2:initdefault:

....
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
...

关于linux - 了解 Bash 初始化脚本启动/停止/重新启动/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941406/

相关文章:

linux - 如果我在程序写入文件时重命名父目录会发生什么

c - CLOCK_MONOTONIC 和 CLOCK_MONOTONIC_COARSE 是否具有相同的基数?

bash - ssh perl 脚本未运行

bash - 如何找到第一个文件中的哪一行在第二个文件中出现频率最高?

linux - 如何执行 url 并从 bash shell 脚本解析它?

使用 CloudEndure 导入 GCE 的 Linux 服务器无法正常工作

node.js - 尝试在 linux 上运行 npm run build 时,NPM 给出 ELILIFECYCLE 错误

linux - linux cp 中的通配符

bash - 为什么我不能在函数内部使用 `declare -r` 来标记变量只读,而 `set -u` 正在使用中?

javascript - 如何处理 mongo 脚本中的命令行参数?