티스토리 뷰
[상황]
jar 파일을 실행시키는 start.sh 파일을 생성하여 service 등록을 하였는데, 정상적으로 동작하지 않는 기능이 생겼다.
>> 서비스 등록 방법은 아래 글에 있습니다!
https://yes-admit.tistory.com/57
환경변수의 문제였는데 해당 기능이 정상적으로 동작 하기 위한 환경변수가 특정 사용자에게만 부여가 되어있기 때문이었다. 따라서 정상 실행을 위해서는 해당 사용자로 실행을 해야했다. (라고 생각했다)
service 등록 시 사용자를 지정 할 수 있기에 사용자와 그룹을 아래와 같이 지정하고 재시작하였다.
(그룹은 생략 가능, 생략한 경우에는 지정한 사용자의 그룹이 사용된다)
[Unit]
Description=test Service #서비스 설명
After=network.target
[Service]
User=my_user # 사용자 지정
Group=my_group # 그룹도 지정(지정하지 않는 경우 User에 지정한 사용자의 그룹을 사용)
Type=forking
Restart=always
RestartSec=1
SuccessExitStatus=143
ExecStart=/usr/local/test.sh #실행 시킬 명령어
[Install]
WantedBy=multi-user.target
서비스 데몬을 reload하고 systemctl로 재시작을 하였다. 프로세스도 지정한 사용자명으로 실행 된 것을 확인! 그러나 기능이 정상적으로 동작하지 않았다ㅜㅜ
왜일까..?
로그인 셸에서 사용되는 환경 변수와는 달리, systemd는 서비스 프로세스를 사용자가 로그인 하지 않은 상태에서 시작하기 때문에(
비인터랙티브한 환경) 사용자의 환경 설정 파일인 .bashrc, .profile 등이 적용되지 않는다.
서비스가 실행 될 때 사용 되는 환경 변수는 아래와 같다.
- 서비스 관리자의 전역적으로 구성된 환경 변수 — systemd-system.conf(5)의 DefaultEnvironment= 설정, 커널 명령 줄 옵션 systemd.setenv= (systemd(1)에서 인식), 또는 systemctl(1)의 set-environment 명령어를 통해 설정된 변수들.
- 서비스 관리자 자체에 의해 정의된 변수들
- 서비스 관리자의 자체 환경 변수 블록에 설정된 변수들 (시스템 서비스 관리자에서는 PassEnvironment=에 따라 다름).
- 유닛 파일의 Environment=를 통해 설정된 변수들.
- 유닛 파일의 EnvironmentFile=에서 지정된 파일에서 읽어들인 변수들.
- PAMName=이 적용될 경우 PAM 모듈에서 설정된 변수들 (예: pam_env(8) 참조).
따라서 나는 unit파일에 환경변수를 지정해주었다.
[Unit]
Description=test Service #서비스 설명
After=network.target
[Service]
Environment=환경변수
User=my_user # 사용자 지정
Group=my_group # 그룹도 지정(지정하지 않는 경우 User에 지정한 사용자의 그룹을 사용)
Type=forking
Restart=always
RestartSec=1
SuccessExitStatus=143
ExecStart=/usr/local/test.sh #실행 시킬 명령어
[Install]
WantedBy=multi-user.target
환경변수를 설정해주니..서비스의 특정 기능이 정상적으로 돌아가는 것을 확인했다..!
사실 해결은 했지만 원인이 아직 정확히 이해가 가는 것은 아니다..(그럼 user를 지정하는건 왜 있는거지..) 언젠가는 이해 할 수 있는 날이 오겠지...
[참고]
https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html
https://askubuntu.com/questions/1161901/systemctl-service-cant-read-the-environment-variable
'백엔드 > OS' 카테고리의 다른 글
- Total
- Today
- Yesterday
- softeer java
- 리액트
- Linux
- react
- java 코테
- javascript
- 현대오토에버
- tomcat
- 코딩테스트
- 자바
- centos
- 자바코테
- 톰캣
- 현대코테
- 자바스크립트
- 스프링
- 현대
- 쿠버네티스
- softeer
- Spring
- springboot
- 도커
- Docker
- 코테
- Kubernetes
- mysql
- 오토에버코테
- java
- 아파치카프카
- 전자정부프레임워크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |