Docker-Compose, меньше и SIGINT

Конфигурации Linux по умолчанию часто устанавливают разрешения на запись на диск только на чтение, чтобы сохранить целостность системы.

Я уже сталкивался с подобными проблемами из-за:

плохой оперативной памяти
поврежденного/старого жесткого диска
неисправных драйверов wifi
неработающего чипсета
поврежденные USB-накопители (они могут влиять на драйверы, сейчас это исправлено)

Это также может быть связано с проблемами ACPI, ноутбуки печально известны этим, попробуйте отключить его в grub и протестировать некоторое время.

Ссылка: как отключить ACPI

https://askubuntu.com/questions/160036/how-do-i-disable-acpi-when-booting

"Вы можете сделать это обходное решение постоянным, если:

sudo nano /etc/default/grub

Измените строку GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" на GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off"

sudo update-grub

Перезагрузите ..... "

В качестве последнего замечания, вы всегда можете перемонтировать диск для чтения/записи после такого события, однако, если это не для того, чтобы изменить что-то, чтобы иметь возможность загрузиться, обычно это не лучшая из идей.

Вы также можете указать Linux перезагружаться после таких событий в /etc/sysctl.conf

kernel.panic = 10
kernel.panic_on_oops=1

1
06.03.2018, 13:00
1 ответ

Я понял это после прочтения этого:

Решение состоит в том, чтобы выполнить set -mв начале скрипта. Это заставляет bash создавать новую группу процессов для каждого процесса, не заставляя SIGINT отправляться каждому процессу в сценарии.

Для справки, фиксированный скрипт выглядит так:

#!/usr/bin/env bash

set -m
set -e

service_name=xxx

for dir in../1../2../3; do
    if [ ! -d "$dir" ]; then
      echo "docker compose requires $dir, please check $dir do exist in the same folder level"
      exit 0
    fi
done

TEMP_LOG_FILE=$(mktemp --suffix '-dev-env-log')
(trap '' SIGINT && docker-compose up --build > ${TEMP_LOG_FILE}) &
less +F -r ${TEMP_LOG_FILE}
rm ${TEMP_LOG_FILE}

echo "Less was quit, stopping containers..."


if [ ! $? -eq 0 ]; then
    echo "could not start service or Control-C was pressed"
    echo "cleaning up"
    docker-compose down
    exit $?
fi

docker-compose down
docker-compose rm --all --force
0
28.01.2020, 00:38

Теги

Похожие вопросы