Благодаря ответу Джеффа Шаллера у меня получилось что-то вроде этого, которое в основном делает то, что мне нужно, назовем его reader.sh
:
#!/bin/sh
INDEX=0
LOGNAME="$INDEX.log"
switchlog() {
local custom_name
read -p "Add log name: " custom_name
INDEX=$((INDEX+1))
LOGNAME="$(printf "%03d" $INDEX).$custom_name.log"
echo now writing to $LOGNAME
}
trap switchlog INT
switchlog
while :
do
read foo < p
printf "%s\n" "$foo" >> "$LOGNAME"
done
Тогда речь идет о создании именованного канала с помощью mkfifo p
и использовании двух терминалов, где monitor_program> p
и reader.sh
запущены. Затем я могу остановить программу чтения, чтобы установить новый журнал, используя Ctrl + C , и ввести новое имя. Ctrl + Z , как обычно, чтобы остановить и убить его.
Оказалось, что проблема не связана с LVM. Как поясняется в Почему это изменение делает мое блочное устройство не загружаемым? , реальная проблема заключается в том, что разделение /
и / boot
на два отдельных раздела, MBR конфигурация больше не была правильной. Мне не удалось обновить файлы конфигурации GRUB, чтобы исправить это, поэтому в конечном итоге мне пришлось сохранить /
и / boot
в одном разделе и добавить другие разделы по отдельности. Не идеально, но работает.
Ключом к загрузке логического тома LVM является поддержка LVM в ядре (конечно), а также загрузка с initrd, который содержит поддержку LVM. Создание initrd нетривиально, поэтому я предлагаю вам посмотреть, настроен ли ваш дистрибутив Linux на загрузку из LVM. А также убедитесь, что EC2 загружает ядро с initrd.