.NET Core 애플리케이션을 게시하는 Centos 7 VPS가 있습니다. 솔루션은 서비스로 실행됩니다.
다음 경로에 게시됩니다.
*/var/opt/MyApp/(All app's files)*
시작 시 기록해야 하는 모든 정보를 기록할 위치를 등록합니다. 로그 경로는 다음과 같이 고정되어 있습니다.
*/var/log/opt/MyApp/(rotated log file)*
아래에 서비스 파일을 만들었습니다.
*/etc/systemd/system/MyApp.service*
다음과 같이
[Unit]
Description=Service MyApp
[Service]
WorkingDirectory=/var/opt/MyApp
ExecStart=/usr/bin/dotnet /var/opt/MyApp/MyApp.dll
Restart=always
# Restart service after 10 seconds if dotnet service crashes
RestartSec=10
SyslogIdentifier=MyApp
User=myappbe
Group=myappbe
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
myappbe 사용자 및 그룹은 다음 명령과 함께 nologin을 사용하여 생성되었습니다.
*useradd -l -r -s /sbin/nologin myappbe*
*usermod -a -G myappbe myappbe*
작업 디렉터리와 로그 위치는 모두 myappbe 사용자 및 0775 권한을 가진 그룹이 소유합니다. 이와 같이 구성된 서비스를 실행하면 Journalctl에서 오류가 표시됩니다.
*Unhandled exception. System.IO.DirectoryNotFoundException: Requested trace logging directory
'/var/log/opt/MyApp/' does not exist*
위치가 존재하고 myappbe가 소유자인 경우에도 마찬가지입니다.
서비스의 사용자 및 그룹 줄을 다음과 같이 변경합니다.
User=root
Group=root
서비스를 루트로 실행하면 오류가 없습니다. 경로를 찾았고 로그가 기록되는 것을 볼 수 있습니다.
루트가 아닌 사용자로 서비스를 실행할 때 경로를 찾을 수 없는 이유는 무엇입니까?
편집하다*
디렉토리가 존재하는지 확인하고 로그 파일에 직접 쓰기 위해 주석을 달았지만 다음 오류가 발생합니다.
System.UnauthorizedAccessException: '/var/log/opt/MyApp' 경로에 대한 액세스가 거부되었습니다.
분명히 서비스를 실행하는 사용자에게는 이 경로에 대한 권한이 없습니다. 하지만 권한은 앞서 언급한 것입니다.