Конфигурации 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
Я понял это после прочтения этого:
Решение состоит в том, чтобы выполнить 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