~修复 Docker 删除重建容器后丢失开机自启状态的问题:将 s6 自启标记持久化到 configs 卷,并在启动时通过 S6_STAGE2_HOOK 同步

This commit is contained in:
纯白色冰淇淋
2026-08-11 11:54:40 +08:00
parent 78ad72f4e4
commit d37267bceb
6 changed files with 51 additions and 4 deletions
+21 -1
View File
@@ -1,3 +1,22 @@
# s6 / Docker:自启状态以 configs 卷内标记为准,并同步到 s6 contents.d
enable_s6_autostart_marks() {
mkdir -p "$CRASHDIR/configs" /etc/s6-overlay/s6-rc.d/user/contents.d
touch "$CRASHDIR/configs/.autostart" /etc/s6-overlay/s6-rc.d/user/contents.d/afstart
}
disable_s6_autostart_marks() {
rm -f "$CRASHDIR/configs/.autostart" /etc/s6-overlay/s6-rc.d/user/contents.d/afstart
}
# 将旧版仅写在可写层的 s6 标记迁移到 configs
migrate_s6_autostart_mark() {
if [ -f /etc/s6-overlay/s6-rc.d/user/contents.d/afstart ] && [ ! -f "$CRASHDIR/configs/.autostart" ]; then
mkdir -p "$CRASHDIR/configs"
touch "$CRASHDIR/configs/.autostart"
fi
}
check_autostart(){
if [ "$start_old" = ON ];then
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
@@ -7,7 +26,8 @@ check_autostart(){
elif ckcmd systemctl; then
[ "$(systemctl is-enabled shellcrash.service 2>&1)" = enabled ] && return 0
elif grep -q 's6' /proc/1/comm; then
[ -f /etc/s6-overlay/s6-rc.d/user/contents.d/afstart ] && return 0
migrate_s6_autostart_mark
[ -f "$CRASHDIR/configs/.autostart" ] && [ ! -f "$CRASHDIR"/.dis_startup ] && return 0
elif rc-status -r >/dev/null 2>&1; then
rc-update show default | grep -q "shellcrash" && return 0
else