我对这个问题做了一些研究,也询问了 ChatGPT,但似乎没有办法用 OpenRC 来测量 alpine 发行版的完整启动时间。
使用dmesg
,我可以看到最后一条消息[ 0.689037] Run /sbin/init as init process
但我想知道“完成”init 过程花了多少时间。我的用例对启动时间敏感,这就是我问的原因。
注意我能够在 1 秒内使用 systemd 启动 ubuntu 22.04,包括内核启动。在systemd中,systemd-analyze
非常有用。所以我希望 openRC 中有一个等价的(或方法)。
答案1
首先,安装 coreutils 以获得 alpine 中的毫秒精度。
apk add coreutils
然后,我们将创建两个服务:
在/etc/init.d/boot-start中
#!/sbin/openrc-run
description="Boot Start Service"
start() {
ebegin "Starting boot-start"
date +%s%3N > /var/boot-time.log
eend $?
}
并在 /etc/init.d/boot-end 中
#!/sbin/openrc-run
description="Boot End Service"
depend() {
after *
}
start() {
ebegin "Starting boot-end"
boot_start_time=$(cat /var/boot-time.log)
boot_end_time=$(date +%s%3N)
duration=$((boot_start_time - boot_end_time))
echo "Boot started at: $boot_start_time" > /var/boot-time.log
echo "Boot ended at: $boot_end_time" >> /var/boot-time.log
echo "Total duration: $duration milliseconds" >> /var/boot-time.log
eend $?
}
然后我们将在启动时启动第一个,最后启动第二个
chmod +x /etc/init.d/boot-start
rc-update add boot-start boot
chmod +x /etc/init.d/boot-end
rc-update add boot-end default
结果看起来像这样
Boot started at: 1686811355808
Boot ended at: 1686811357194
Total duration: -1386 milliseconds