Я не заметил, что записи меню загрузки в /boot/grub2/grub.cfg содержат жестко заданные параметры для разделов подкачки. Одним из них был rd.luks.uuid = luks-b4b59673-e85b-4529-840f-a9843a27a121
, который соответствует старому разделу подкачки.
Для правильной загрузки мне пришлось нажать e
в меню загрузки grub, а затем вручную удалить параметр из строки, начинающейся с linux
. Затем этот измененный пункт меню можно загрузить, нажав F10
.
После успешной загрузки я отредактировал / etc / default / grub и удалил параметры. Затем я обновил конфигурацию grub с помощью # grub2-mkconfig -o /boot/grub2/grub.cfg
.
Также не забудьте настроить / etc / crypttab и / etc / fstab .
В конце вашего сценария вы можете использовать date +%s
, чтобы получить текущее время (в секундах с 1970 года -01 -01 )и записать его во внешний файл, перезаписав существующее содержимое.
В начале сценария вы можете прочитать это значение из файла, снова взять текущее время (с помощью date +%s
), вычесть одно из другого и использовать разницу, чтобы решить, что делать.
(Это общая картина. Очевидно, вам придется иметь дело с такими ситуациями, как файл не найден, числовое значение, не прочитанное -, права доступа к файлу, состояние гонки и т. д., но это детали.)
Вы можете сохранить дату последнего запуска в файле:
date +"%s" > last_file
last_file
здесь имя файла. Это записывает секунды с начала эпохи, например. 1549605438. Получив это, вы можете прочитать его с помощью:
read last < last_file
Здесь last
— имя переменной оболочки. Как только вы это сделаете, вам понадобятся некоторые арифметические действия для сравнения:
threshold=900 # 60 * 15 = 15 minutes
[ "$(date +'%s')" -gt "$((last + threshold))" ] || exit
Сравните текущее количество секунд с последним плюс установленный интервал паузы. Выйдите, если еще недостаточно времени осталось. Продолжить, иначе --выполняется остальная часть скрипта.
Наконец, вам нужен какой-нибудь семафор, чтобы предотвратить запуск двух экземпляров примерно одинаково, т.е. процесс 2 запускается до того, как процесс 1 уже проверил дату последнего запуска и записал свою собственную.
Полный алгоритм выглядит так:
Нужно помнить, что до первого запуска скрипта last_file
не будет существовать, если вы не поместите его туда вручную. Так что либо поместите его туда, либо сделайте свой скрипт невосприимчивым к этому с помощью соответствующей логики.