Scipt запускается только один раз в заданное время

Я не заметил, что записи меню загрузки в /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 .

2
08.02.2019, 10:14
2 ответа

В конце вашего сценария вы можете использовать date +%s, чтобы получить текущее время (в секундах с 1970 года -01 -01 )и записать его во внешний файл, перезаписав существующее содержимое.

В начале сценария вы можете прочитать это значение из файла, снова взять текущее время (с помощью date +%s), вычесть одно из другого и использовать разницу, чтобы решить, что делать.

(Это общая картина. Очевидно, вам придется иметь дело с такими ситуациями, как файл не найден, числовое значение, не прочитанное -, права доступа к файлу, состояние гонки и т. д., но это детали.)

2
27.01.2020, 21:58

Вы можете сохранить дату последнего запуска в файле:

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 уже проверил дату последнего запуска и записал свою собственную.

Полный алгоритм выглядит так:

  1. Установить семафор.
  2. Чтение времени последнего выполнения.
  3. Если у вас есть зеленый свет, напишите свое собственное время выполнения (возможно позже, как только вы закончите собственно операции ).
  4. Делайте то, о чем этот сценарий.
  5. Освободить семафор.

Нужно помнить, что до первого запуска скрипта last_fileне будет существовать, если вы не поместите его туда вручную. Так что либо поместите его туда, либо сделайте свой скрипт невосприимчивым к этому с помощью соответствующей логики.

2
27.01.2020, 21:58

Теги

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