티스토리 뷰
개인 서버라면 root
계정이나 sudo
커맨드를 고민 없이 사용하지만, 실무에서는 서버 관리자가 아니라면 그러기가 쉽지 않다. 그렇다고 매번 서버 관리자에게 작업을 요청할 수 없으니, 유저 권한으로 할 수 있는 것들은 최대한 해야하겠지…🙂↕️
이번 포스팅에서는 유저 권한으로 서비스를 실행하는 방법과 계정 로그아웃 상황에서도 서비스를 유지하는 방법에 대해 정리해본다.
1. 테스트 스크립트 생성
유저 서비스로 등록할 테스트 스크립트(→ 1초 간격으로 현재 시간을 tmp 경로에 남김)는 다음과 같다. 해당 스크립트를 유저의 홈 경로(~/test.sh
)에 저장하여 사용할 것이다.
#!/bin/bash
while true; do
echo `date` >> /tmp/date.log
sleep 1
done
스크립트 실행을 위해서 실행 권한도 변경해준다.
$ chmod u+x ~/test.sh
2. 서비스 유닛 파일 생성
유저 레벨의 서비스 유닛 파일 경로는 ~/.config/systemd/user
에 저장해서 사용한다. 디렉토리가 없다면 생성해서 서비스 유닛 파일을 저장한다.
$ mkdir -p ~/.config/systemd/user
서비스 유닛 파일(~/.config/systemd/user/user-test.service
)은 이전 단계에서 생성된 파일을 실행하도록 구성했다.
[Unit]
Description=Test User-Level Service
[Service]
ExecStart=/home/foo/test.sh
Restart=always
[Install]
WantedBy=default.target
3. 서비스 실행
이제 추가한 서비스 유닛 파일을 다음 명령어를 통해 로드하고
$ systemctl --user daemon-reload
서비스를 실행한다!
$ systemctl --user start user-test
서비스의 상태와 실행 결과를 확인하면 문제 없이 잘 수행되는 것을 알 수 있다.
4. 유저 로그아웃에도 서비스 유지하기
여기까지 했으면 유저 권한으로 서비스를 잘 실행했을 수도 있다고 볼 수 있지만, 문제는 유저가 로그아웃을 하게되면 서비스가 멈추게 된다. → 이번 포스팅을 작성한 계기이다.
다시 로그인을 한 뒤 서비스 상태를 확인해보면 inactive
로 변경된 것을 볼 수 있다.
서비스를 유저가 로그아웃을 해도 계속 실행되도록 하기 위해서는 아래의 명령어를 사용하면 된다.
$ loginctl enable-linger $USER
그러면 유저의 Linger
속성이 yes로 변경되고, 유저가 로그아웃을 해도 유저 서비스가 유지된다.
테스트 결과를 살펴보면, 유저가 로그아웃을 해도 서비스가 유지되고 다시 접속해 서비스 상태를 확인해도 active
인 것을 알 수 있다.
'Linux' 카테고리의 다른 글
[linux] 일반 유저로 1024 미만의 포트 사용하기 (0) | 2024.04.21 |
---|---|
[linux] 오프라인 환경(air gap)을 위한 yum repository 구축하기 (0) | 2024.03.24 |