启动脚本中针对不同故障的退出代码

启动脚本中针对不同故障的退出代码

我正在运行 Arch Linux 安装,并且有一个运行的 systemd 服务/etc/rc.local。在 中rc.local,我有几个命令来执行我找不到合适解决方案的操作,例如运行dmesg -D或自动在临时文件夹中创建挂载点的操作,就像在 macOS 中使用/Volumes.

对于脚本中的每个命令rc.local,我都会测试脚本是否失败,然后以与命令行对应的数字退出。因此,文件的片段(经过调整以记住我的格式)将如下所示:

#!/bin/bash

dmesg -D || exit 1
i=2
for name in usb sd
do
    mkdir -p /mnt/${name} || exit ${i}
    i=$((i+1))
done
sysctl -w kernel.kptr_restrict=2 || exit 4

exit 0

这有点笨拙,我的印象是退出代码应该限制在脚本的分配中,但这是我知道如何检查我的 systemd 服务rc-local.service失败的原因的唯一方法,因为systemctl status rc-local.service会打印出退出值。是否有其他方式进行编码rc.local,以便 systemd/rc-local.service将接收有关失败原因的信息rc.local,例如可能向其传递字符串或其他内容?然后当我输入时,我可以看到这个字符串可能像这样显示systemctl status rc-local.service

Error reason: Failed to set kernel.kptr_restrict

答案1

失败(非零退出代码)应导致命令(或 shell,如果命令崩溃)打印错误。

systemd 会将这样的错误消息写入系统日志。好处systemctl status是它显示服务的最新日志行。

http://0pointer.net/blog/projects/systemctl-journal.html

systemctl status编辑:只有当以 root ( ) 身份运行时sudo,或者您是组adm或的成员时,才可以读取系统日志systemd-journal

相关内容