Вопрос или проблема
Я пытаюсь установить приложение .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.
ExecStart=/usr/bin/dotnet/dotnet
- Настроить разрешения для файла службы, как
chmod 755 ваше_имя_файла.service
- После установки прав выполните ниже команды
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
. Для решения этой проблемы выполните следующие шаги:
-
Проверьте права доступа к исполняемому файлу:
Убедитесь, что у файла/usr/local/dotnet
установлены корректные права доступа. Вы уже продемонстрировали вывод командыls -la
, который показывает права на этот файл как-rwxr-xr-x
. Это означает, что у всех пользователей есть права на выполнение файла. Однако, возможная причинаPermission denied
может заключаться в том, что пользователю, под которым запускается служба, не разрешен доступ к этому приложению. -
Убедитесь, что путь к .NET верный:
Проверьте, правильно ли указан путь к .NET в вашем файле службы. Попробуйте изменитьExecStart
на:ExecStart=/usr/local/dotnet/dotnet /var/Application/netcoreapp31/helloapp.dll
Если вы установили .NET через стандартный пакет, то путь, возможно, будет
/usr/bin/dotnet
. -
Проверьте SELinux:
Если SELinux включен, он может блокировать выполнение приложения. Вы можете временно отключить его, чтобы проверить, является ли он причиной проблемы:sudo setenforce 0
Если это решит проблему, вам нужно будет настроить SELinux для разрешения запуска вашего приложения.
-
Установите нужные права для файла службы:
Выполните команду:sudo chmod 755 /etc/systemd/system/kestrel-dotnetapp.service
-
Перезапустите systemd:
После изменения файла службы выполните команды:sudo systemctl daemon-reload sudo systemctl enable kestrel-dotnetapp.service sudo systemctl start kestrel-dotnetapp.service sudo systemctl status kestrel-dotnetapp.service
Это перезагрузит конфигурацию systemd и запустит вашу службу.
-
Проверьте логи:
Если служба по-прежнему не запускается, просмотрите логи для получения дополнительных деталей:journalctl -u kestrel-dotnetapp.service
Если после выполнения этих шагов проблема не решится, дайте дополнительные сведения об ошибках из логов, и я помогу вам с дальнейшей диагностикой.