在对失败的 Docker 部署进行故障排除时,我注意到 Dockerfile 中有此行。下面这行到底起什么作用?
#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
答案1
这段代码有四个组成部分:
1).#!/bin/sh
是一个“shebang”,指向运行后续代码的特定解释器。在这种情况下,shebang 之后的代码将发送到 Sh,这很可能是 Bash(可能是最常见的 Linux shell)。
2).\n
是定义换行符的特殊字符。
3).exit 0
用于脚本中定义程序如何结束。通常,退出代码为零表示程序成功完成(并非总是如此,所以请记住这一点)。
4).>
是 Linux 重定向。有多个运算符可以操作 Stdin、Stdout 和 Stderr。在这种情况下,Stdin 的结果(运算符左侧)将发送到文件(由运算符右侧的文件名定义)。这就是更新特定文件的方式。
假设这是 Debian/Ubuntu 发行版,则policy-rc.d
确定守护进程是否在刚刚安装/升级后启动/重新启动。它通过读取退出代码来执行此操作,因此在此示例中,“0”表示可以自动启动。
通常在 chrooted 环境中,此退出代码设置为 101 以防止守护进程启动。以下是有关更多信息的有用链接:https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt