我正在运行 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
。