kestrel-dotnetapp.service: Не удалось выполнить шаг EXEC при запуске /usr/local/dotnet: Отказано в доступе

Вопрос или проблема

Я пытаюсь установить приложение .NET Core (3.1) на CentOS 8, следуя шагам, указанным в документации Microsoft вход.

Файл службы в соответствии с документом Microsoft /etc/systemd/system/kestrel-dotnetapp.service

[Unit]
Description= .NET Web API App для centos

[Service]
WorkingDirectory=/var/Application/netcoreapp31
ExecStart=/usr/local/dotnet /var/Application/netcoreapp31/helloapp.dll
Restart=always
# Перезапустить службу через 10 секунд, если служба dotnet завершится с ошибкой:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnetapp
User=user
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Когда я выполняю > sudo systemctl restart kestrel-dotnetapp.service, у меня возникает ошибка.

Jun 04 22:51:28 hostname systemd[1827]: kestrel-dotnetapp.service: Не удалось выполнить команду: Доступ запрещен
Jun 04 22:51:28 hostname systemd[1827]: kestrel-dotnetapp.service: Не удалось на этапе EXEC запустить /usr/local/dotnet: Доступ запрещен
— Тема: Процесс /usr/local/dotnet не может быть выполнен
— Определено: systemd

Ниже приведен ls -la :

[user@hostname dotnet]$ ls -la
total 108
drwxr-xr-x.  4 root root    94 Apr 22 09:34 .
drwxr-xr-x. 14 root root   154 Jun  4 21:11 ..
-rwxr-xr-x.  1 root root 73048 Apr 22 09:32 dotnet
drwxr-xr-x.  3 root root    17 Apr 22 09:34 host
-rw-r--r--.  1 root root  1116 Apr 22 09:29 LICENSE.txt
drwxr-xr-x.  4 root root    67 Apr 22 09:34 shared
-rw-r--r--.  1 root root 31330 Apr 22 09:29 ThirdPartyNotices.txt

Папка с артефактами моего приложения

[user@hostname Application]$ ls -la
total 8
drwxr-xr-x.  3 root root     26 Jun  4 20:53 .
drwxr-xr-x. 22 root root   4096 Jun  4 20:53 ..
drwxr-xr-x.  2  777 user 4096 Jun  4 20:45 netcoreapp31

Пожалуйста, найдите ниже решение проблемы с доступом к usr/bin/dotnet в ОС Red Hat.

  1. ExecStart=/usr/bin/dotnet/dotnet
  2. Настроить разрешения для файла службы, как chmod 755 ваше_имя_файла.service
  3. После установки прав выполните ниже команды
    sudo systemctl enable ваше_имя_файла.service
    sudo systemctl start ваше_имя_файла.service  
    sudo systemctl status ваше_имя_файла.service          
    

Пример для вашего имени файла: abc.service

Ответ или решение

Ошибка, которую вы получили, kestrel-dotnetapp.service: Failed at step EXEC spawning /usr/local/dotnet: Permission denied, указывает на то, что служба системы не имеет прав на выполнение исполняемого файла .NET, находящегося по пути /usr/local/dotnet. Для решения этой проблемы выполните следующие шаги:

  1. Проверьте права доступа к исполняемому файлу:
    Убедитесь, что у файла /usr/local/dotnet установлены корректные права доступа. Вы уже продемонстрировали вывод команды ls -la, который показывает права на этот файл как -rwxr-xr-x. Это означает, что у всех пользователей есть права на выполнение файла. Однако, возможная причина Permission denied может заключаться в том, что пользователю, под которым запускается служба, не разрешен доступ к этому приложению.

  2. Убедитесь, что путь к .NET верный:
    Проверьте, правильно ли указан путь к .NET в вашем файле службы. Попробуйте изменить ExecStart на:

    ExecStart=/usr/local/dotnet/dotnet /var/Application/netcoreapp31/helloapp.dll

    Если вы установили .NET через стандартный пакет, то путь, возможно, будет /usr/bin/dotnet.

  3. Проверьте SELinux:
    Если SELinux включен, он может блокировать выполнение приложения. Вы можете временно отключить его, чтобы проверить, является ли он причиной проблемы:

    sudo setenforce 0

    Если это решит проблему, вам нужно будет настроить SELinux для разрешения запуска вашего приложения.

  4. Установите нужные права для файла службы:
    Выполните команду:

    sudo chmod 755 /etc/systemd/system/kestrel-dotnetapp.service
  5. Перезапустите systemd:
    После изменения файла службы выполните команды:

    sudo systemctl daemon-reload
    sudo systemctl enable kestrel-dotnetapp.service
    sudo systemctl start kestrel-dotnetapp.service
    sudo systemctl status kestrel-dotnetapp.service

    Это перезагрузит конфигурацию systemd и запустит вашу службу.

  6. Проверьте логи:
    Если служба по-прежнему не запускается, просмотрите логи для получения дополнительных деталей:

    journalctl -u kestrel-dotnetapp.service

Если после выполнения этих шагов проблема не решится, дайте дополнительные сведения об ошибках из логов, и я помогу вам с дальнейшей диагностикой.

Оцените материал
Добавить комментарий

Капча загружается...