сбой :repodata/repomd.xml из libnvidia -контейнер :[Errno 256] Нет больше зеркал для попыток

У вашего сервиса нет Type=, указанного в разделе [Service], поэтому systemdпредполагает, что вы имели в виду Type=simple.

Это означает, что systemdбудет ожидать, что процесс, запущенный с помощью ExecStart=, будет продолжать работать, пока работает служба. Но похоже, что ваш start.shзапускает только одну команду, а затем завершает работу. То есть команда forever:forever startзапускает целевую команду как демон или, другими словами, в фоновом режиме. Как только команда forever startзавершится, оболочка, выполняющая start.sh, завершит работу.

В этот момент systemdсчитает эту службу неисправной. Но подождите, в группе управления, назначенной для этой службы, все еще есть запущенный процесс. «Значит, — думает systemd, — не только не получилось, но еще и бардак после себя оставил. Не может быть такого». Поскольку KillMode=и KillSignal=не указаны, systemdпродолжает работать со своими значениями по умолчанию и отправляет SIGTERM для всех оставшихся процессов в этой группе управления, и если они не останавливаются своевременно, СИГКИЛЛ. После этого ваш фактический процесс NodeJS будет гарантированно мертв.

Как исправить

Поскольку команда, которую вы запускаете с ExecStart=, завершится, как только будет запущен фактический сервер, вы не можете использовать Type=simpleпо умолчанию. Необходимо указать другой тип службы.

Вы можете использовать Type=forking. С этим типом man systemd.serviceрекомендует использовать параметр PIDFile=, поэтому, если ваш сервер NodeJS создает файл PID для себя (или вы добавляете параметры в команду forever, чтобы он создал для него файл ), вы должны сообщить systemd, где она будет.

[Service]
Type=forking
PIDFile=/absolute/path/to/nodejs.pid
User=rails
... 

Если Type=forkingу вас не работает, вы можете указать Type=oneshotс помощью RemainAfterExit=yes.

Это означает, что systemdпросто запускает команду ExecStart=при запуске службы и ExecStop=при ее остановке и не заботится ни о чем другом.

Однако

systemdпо-прежнему помнит, была ли служба в последний раз установлена ​​в остановленном или запущенном состоянии. Поэтому, если вы установите другую службу в зависимость от этой службы,а затем остановите службу NodeJS вручную, другая служба не остановится автоматически и, несомненно, вернет ошибки, если не сможет использовать вашу службу NodeJS.


Третий вариант — полностью пропустить команду foreverи позволить systemdперезапустить процесс NodeJS. В этом случае вся ваша единица nodejs.serviceбудет:

[Unit]
Description=nodejs server

[Service]
User=rails
Group=rails
ExecStart=/home/rails/NodeJSserver/server.js
Restart=always

[Install]
WantedBy=multi-user.target

Вы можете добавить другие параметры.

Например, вы можете указать RestartSec=5, чтобы указать 5 -секунд ожидания перед попыткой перезапустить службу, если она неожиданно умирает, чтобы избежать перегрузки системных ресурсов частыми попытками перезапуска, если ваша служба продолжает умирать сразу после перезапуска. по какой-то причине. (Значение по умолчанию RestartSec=равно 100 мс.)

Или, если вы хотите, чтобы служба была перезапущена, если она возвращает некоторые определенные значения состояния выхода, но считает, что она не удалась на других, для этого тоже есть варианты.

0
19.09.2020, 07:42
1 ответ

Попробуйте заменить репозиторий yum на тот, который описан здесь:

https://nvidia.github.io/libnvidia-container/centos7/libnvidia-container.repo

0
18.03.2021, 23:03

Теги

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