Загрузчик Systemd не показан (Двойная загрузка Windows10 / Pop! _ОС)

Как мне удалось понять из ОП:

  • вы запускаете процесс my_script.py, но вы не можете предсказать завершение или время выхода.
  • процесс my_script.pyвыполняется и записывает в лог-файл (вызывайте его file.logдо тех пор, пока он не остановится.
  • Каждый небольшой интервал времени вы хотите проверять, не старше ли время последней модификации вашего файла журнала более 30 секунд. Если это так, убейте и заново -запустите процессmy_script.py

Это можно сделать разными способами. Один из них заключается в том, чтобы полагаться на inotifyиз пакета inotify-toolsдля мониторинга событий файловой системы по линии совершенно хороших ответов здесь и (, еще лучше)там .

В качестве альтернативы вышеизложенному можно вручную определить дату последней модификации файла журнала и проверить, продолжает ли отображаться pid вашего процесса. Поместите всю логику в короткий исполняемый bash-скрипт, например:

#!/bin/bash

/usr/bin/python my_script.py >> file.log & # launch process in background
my_proc_pid="$!" # save process pid for last executed command

prevtime=0  # initialize "previous modification time" variable

while : ; do
    sleep 1    # check log file modification time every 1s
    # modification time in milliseconds
    if (( $(\find /path/to/file.log/ -name file.log -printf "%T") - prevtime > 30000)); then
    #if (( "$(\ls -l --time-style=+%s /path/to/logfile/file.log | cut -d' ' -f6)" - prevtime > 30)); then 
        prevtime="$(\find /path/to/file.log/ -name file.log -printf \"%T\")"
        #prevtime="$(\ls -l --time-style=+%s /path/to/logfile/file.log | cut -d' ' -f6)"
        if (\ps | grep -v grep | grep "$my_proc_pid" &>/dev/null) ; then
            # kill process in background, '&>' same as '>/dev/null 2>&1' 
            /usr/bin/kill -9 "$my_proc_pid" &>/dev/null
        fi
        # launch process and save its pid
        /usr/bin/python my_script.py >> file.log & 
        my_proc_pid="$!"
    fi
done

# use CTRL-C to stop loop execution and to exit script

Примечание:Я включил два способа поиска времени модификации вашего файла журнала. Тот, который не закомментирован, включает find, который обрабатывает странные имена файлов (, например. с пробелами и т. д. )лучше, чем ls, и не зависит ни от какой трубы. Однако в этом случае вы должны предоставить полный ПУТЬ к вашему файлу журнала(/path/to/logfile/)в качестве первого аргумента cmd find. В случае lsвам необходимо указать тот же путь вместе с полным именем файла журнала, что и в:/path/to/logfile/file.log

Я частично проверил это на bashv5.0.1. Сообщите о проблемах, если таковые имеются.ХТХ

2
11.11.2020, 22:37
1 ответ

Мне удалось решить проблему с помощью комментариев. Спасибо вам всем! Для полноты я быстро перечислю все шаги, которые я предпринял, чтобы исправить это :

.

Quickfix -Если вам нужно быстро загрузиться без решения актуальной проблемы

  • Вставьте livestick с работающим загрузчиком (Я использовал Ubuntu 20.04 с GRUB)

  • После запуска GRUB из livestick прервите процесс загрузки, нажав c или esc .

  • Теперь определите загрузчик, который вы хотите использовать (для меня, это был загрузчик systemd, расположенный на моем жестком диске2, раздел 1)

    chainloader (hd2,1)/efi/systemd/systemd-bootx64.efi

    boot

Это должно позволить вам загрузиться с заданным загрузчиком.

Устранить проблему

  • Сначала я восстановил загрузчик systemd в соответствии с этим руководством. (Возможно, вам потребуется использовать приведенное выше быстрое исправление для загрузки вашей системы Linux)

  • Поскольку это не решило проблему, я загрузился в Windows и выполнил (от имени администратора )командную строку.

  • Я смонтировал свой раздел EFI, следуя этому руководству(Я смонтировал его в V :).

  • Тогда,Я добавил файл EFI как путь {bootmgr} и смонтированный раздел EFI как устройство в моей записи bcdedit {bootmgr}

    .

    bcdedit /set {bootmgr} path \EFI\systemd\systemd-bootx64.efi

    bcdedit /set {bootmgr} device partition=V:

  • Затем я перезагрузился (он снова загрузился прямо в Windows )и увидел, что запись устройства bcdedit {bootmgr} изменилась с partition=V:на partition=\Device\ HarddiskVolume2

  • Я снова перезагрузился, и это сработало. Так что, возможно, я мог бы напрямую установить устройство на partition=\Device\HarddiskVolume2 ... Однако это сработало для меня.

2
18.03.2021, 22:50

Теги

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