문제
서버를 Restart할 때, 아래와 같이 nginx 문제로 Restart가 실패했다.
Restart할 때 서버 2개를 차례로 진행하는 데, 서버#1은 성공하고 서버#2는 실패했다.
아래는 실패 시, 서버#2의 로그이다.
원인
chown은 linux에서 파일 소유권을 변경하는 명령어인데, /dev/shm/nginx_client_temp 파일에 chown을 실행할 수 있는 권한이 없어 Operation not permitted 에러가 나왔다고 생각했다.
서버#1과 서버#2 각각 /dev/shm 경로로 접근하고 아래 명령어로 파일의 권한을 확인했다.
ls -l
서버 #1은 아래와 같이 drwxrwxrwx 권한을 가진 것을 알 수 있다.
서버 #2는 drwx------ 권한으로, 서버#1과 다른 권한을 가지고 있다.
알파벳 drwx는 아래와 같은 의미를 가진다.
- d: 디렉토리
- r: 읽기 권한 (Read)
- w: 쓰기 권한 (Write)
- x: 실행 권한 (Execute)
drwxrwxrwx는 d/rwx/rwx/rwx 로 나눌 수 있는데, 디렉토리/파일 소유자에게 부여된 권한/그룹에 부여된 권한 권한/그외 사용자에 부여된 권한 으로 나눌 수 있다.
즉, 서버#1은 파일 소유자, 그룹, 그 외 사용자에게 읽기(r), 쓰기(w), 실행하기(x) 권한을 모두 부여한 것이다.
서버#2는 drwx------ 로, 파일 소유자에게만 rwx 권한을 부여하고 있었다.
해결
서버#2에도 /dev/shm/nginx_client_temp 파일에 대해 서버#1과 동일한 drwxrwxrwx 권한을 부여했다.
아래 명령어로 권한을 부여했다.
sudo chmod 777 /dev/shm/nginx_client_temp
참고로, 777에서 7은 rwx 모든 권한의 숫자를 합한 값이다. 즉, rwx/rwx/rwx 가 777이 되는 것이다.
- r(읽기): 4
- w(쓰기): 2
- x(실행): 1
/dev/shm/nginx_client_temp의 권한을 변경하고 서버를 Restart하니, 아래와 같은 에러가 났다.
에러 메시지가 'nginx: [emerg] chown("/dev/shm/nginx_proxy_temp", 503) failed (1: Operation not permitted)' 로 이번에는 /dev/shm/nginx_proxy_temp 에서 났다. /dev/shm/nginx_client_temp 이후 생성되는 파일이었다.
nginx_proxy_temp도 nginx_client_temp와 동일하게 chmod로 drwxrwxrwx 권한을 줘서 Restart에 성공했다.
참고 자료
https://recipes4dev.tistory.com/175
https://www.lesstif.com/lpt/linux-chown-93127453.html