Я попробовал предложенный вариант:
Requires=docker.service network-online.target
After=docker.service network-online.target
Но это не сработало.Я получил:
-- Reboot --
Feb 09 23:20:24 coreos-512mb-fra1-01 systemd[1]: Starting New Relic Linux Server Monitor (nrsysmond)...
Feb 09 23:20:24 coreos-512mb-fra1-01 docker[782]: Failed to kill container (nrsysmond): Error response from daemon: Cannot kill container nrsysmond: Container c608c10f44c06c550492e872773b0d5a59a7b86e639f63487f6186983a4f786b is not running
Feb 09 23:20:25 coreos-512mb-fra1-01 docker[787]: nrsysmond
Feb 09 23:20:25 coreos-512mb-fra1-01 docker[794]: Pulling repository docker.io/newrelic/nrsysmond
Feb 09 23:20:25 coreos-512mb-fra1-01 docker[794]: Error while pulling image: Get https://index.docker.io/v1/repositories/newrelic/nrsysmond/images: dial tcp: lookup index.docker.io: Temporary failure in name resolution
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Control process exited, code=exited status=1
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: Failed to start New Relic Linux Server Monitor (nrsysmond).
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Unit entered failed state.
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Failed with result 'exit-code'.
Добавление Restart
и RestartSec
устранило проблему:
# Restart after crash
Restart=always
# Give the service 10 seconds to recover after the previous restart
RestartSec=10s
Это не элегантно, но работает. Вот журнал:
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: Starting New Relic Linux Server Monitor (nrsysmond)...
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[792]: Failed to kill container (nrsysmond): Error response from daemon: Cannot kill container nrsysmond: Container 31fb78809
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[797]: nrsysmond
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[804]: Pulling repository docker.io/newrelic/nrsysmond
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[804]: Error while pulling image: Get https://index.docker.io/v1/repositories/newrelic/nrsysmond/images: dial tcp: lookup ind
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Control process exited, code=exited status=1
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: Failed to start New Relic Linux Server Monitor (nrsysmond).
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Unit entered failed state.
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Failed with result 'exit-code'.
Feb 09 23:24:08 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Service hold-off time over, scheduling restart.
Feb 09 23:24:08 coreos-512mb-fra1-01 systemd[1]: Stopped New Relic Linux Server Monitor (nrsysmond).
Feb 09 23:24:08 coreos-512mb-fra1-01 systemd[1]: Starting New Relic Linux Server Monitor (nrsysmond)...
Feb 09 23:24:08 coreos-512mb-fra1-01 docker[869]: Failed to kill container (nrsysmond): Error response from daemon: Cannot kill container nrsysmond: No such container:
Feb 09 23:24:08 coreos-512mb-fra1-01 docker[875]: Failed to remove container (nrsysmond): Error response from daemon: No such container: nrsysmond
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: latest: Pulling from newrelic/nrsysmond
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: 6ffe5d2d6a97: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: f4e00f994fd4: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: e99f3d1fc87b: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: a3ed95caeb02: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: a3ed95caeb02: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: 65cdb07f703d: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: a3ed95caeb02: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: Digest: sha256:c184f97452321baa0b0ee4ee402e3aaa204f041beb7a71a347db6c4efecba07f
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: Status: Image is up to date for newrelic/nrsysmond:latest
Feb 09 23:24:10 coreos-512mb-fra1-01 systemd[1]: Started New Relic Linux Server Monitor (nrsysmond).
Поскольку я получил эту проблему в DigitalOcean CoreOS, я искал помощь в их ресурсах. Существует поток , связанный с этой проблемой. Это предполагает следующее:
After=early-docker.service systemd-networkd-wait-online.service
Requires=early-docker.service systemd-networkd-wait-online.service
Before=early-docker.target
Но эти строки заставляли Docker зависать / зависать. Мне пришлось убить все процессы, связанные с моей службой, а затем перезапустить службу Docker, чтобы она снова работала.
Версия Docker:
docker -v
Docker version 1.10.0, build e21da33
Пожалуйста, проверьте имена установленных пакетов GRUB. Если они содержат что-то вродеgrub2-i386-pc
(или каталог /boot/grub2/i386-pc
существует ), вы случайно загрузили программу установки SuSE в устаревшем режиме BIOS, и поэтому он установил устаревшую версию BIOS загрузчика GRUB, которая, естественно, не может загружать никакие операционные системы. система, использующая более новую схему загрузки UEFI.
Чтобы это исправить:
Во-первых, узнайте, как загрузить систему в Linux в режиме UEFI и получить доступ к установке OpenSUSE. Для этого может подойти установочный носитель openSUSE в режиме Rescue System или LiveCD/USB. Вот ссылка на соответствующие инструкции из документации openSUSE
Убедитесь, что вы действительно находитесь в режиме UEFI, запустив efibootmgr -v
. Если он отвечает EFI variables are not supported on this system
, вам удалось загрузиться не в режиме UEFI, а в устаревшем режиме BIOS. (Загрузка в устаревшем режиме BIOS отключает службы среды выполнения UEFI, которые представляют собой механизм, используемый для доступа к переменным EFI NVRAM.)
Возможно, вам потребуется изменить настройки UEFI BIOS, чтобы предпочесть загрузку UEFI устаревшему BIOS, или полностью отключить устаревшую совместимость (, часто известную как CSM = модуль поддержки совместимости ). Фактическая процедура на этом этапе зависит от вашего оборудования и UEFI BIOS. Обратитесь к документации по вашему оборудованию.
После того, как вам удалось загрузить систему в режиме UEFI и получить доступ к установке openSUSE, удалите все текущие пакеты загрузчика GRUB. Затем смонтируйте системный раздел EFI как /boot/efi
и полностью переустановите GRUB2. Если управление пакетами требует, чтобы вы выбрали фактическую версию аппаратного обеспечения GRUB2 -, зависимый пакет, выберите grub2-x86_64-efi
вместо grub2-i386-pc
.
Обычно полная переустановка GRUB включает сценарий, который автоматически обновляет переменные EFI NVRAM с помощью инструмента efibootmgr
. С efibootmgr -v
вы должны увидеть список параметров загрузки, аналогичный тем, что доступны в настройках UEFI BIOS. После (re )установки UEFI-версии GRUB список должен включать новую запись для OpenSUSE, указывающую расположение файла загрузчика grubx64.efi
в системном разделе EFI. Если по какой-то причине этого не произошло, вы можете использовать следующую команду, чтобы создать его вручную:
efibootmgr -c -d /dev/sda -L "openSUSE" -l '\EFI\opensuse\grubx64.efi'
Обратите внимание, что параметр efibootmgr -d
указывает все дисковое устройство -, содержащее системный раздел EFI, а не сам раздел.
Системный раздел EFI не является эксклюзивным для Windows :в системах UEFI, предполагается, что все установленные операционные системы помещают туда свои основные загрузчики. Существует даже стандартизированная схема каталогов для предотвращения конфликтов между загрузчиками :. Предполагается, что каждый производитель помещает свой загрузчик в каталог \EFI\<vendor name>\
, и OpenSUSE и Microsoft соблюдают это.