Unix/Arch Linux

systemd 유저레벨 데몬 만들어 돌리기

ForceCore 2015. 6. 14. 00:06

보통은 만들일이 없는데, 특이한 일을하려면 좀 필요하다.

 

필자의 경우는 IRC 봇을 돌리는 일을 하려고 썼다.

IRC 봇을 돌려서 Op을 유지하려고 하는데, 라즈베리파이에 돌리는 것이다보니 좀 재부팅이 되기도 하고... 그래서 screen으로 띄워서 수동으로 두는 일은 영 불안정했다. 시스템이 살았나 죽었나 체크해서 죽으면 screen부터 다시 켜야 하고...

 

중요정보: Arch Linux고...

https://wiki.archlinux.org/index.php/Systemd/User

 

 

 

1. 우선 systemd 용 디렉토리를 만들어야 한다.

 

$ mkdir -p ~/.config/systemd/user

 

 

 

2. 돌려야 하는 프로그램 이름이 willie면...

willie.service 파일을 위의 디렉토리 안에 만든다. 내용은:

 

[Unit]
Description=Willie IRC Daemon

[Service]
ExecStart=/usr/bin/willie

[Install]
WantedBy=default.target


여기서, /usr/bin/willie -d 가 아니라는거!

-d가 데몬모드인데, -d를 안 넣으면 테스트 프로그램처럼 컨트롤 c를 누르면 종료되는 것이다. 안 넣어야 작동한다 ㅎㄷㄷㄷ [Service] 안의 내용을 잘 맞추면 된다. [Install]은 바꿀 것이 없을 것이다. [Unit]은 나중에 systemctl 에서 보일 내용이라 알아보기 좋게 적으면 된다.

 

 

 

3. 이제 서비스를 활성화 하자.

 

$ systemctl --user enable willie

$ systemctl --user start willie

 

이렇게 해주면 된다. start가 stop이 잘 먹히나 체크하자.

 

 

 

4. 문제는, 저 서비스가 시작되는 시점이 언제냐면, GUI든 ssh든 유저가 로그인 할 때이다. 즉, 시스템이 재시작된다고 시작되지 않는다!!! loginctl을 써야 함.

 

# loginctl enable-linger username

 

이렇게 하면 자동으로 시작해줄 것이다. 재부팅을 해가면서 테스트 해보자.

 

Added 2024-06017

5. 재부팅 없이 체크하는 법

 

$ loginctl user-status username

명령어를 쓰면 아래와같이 Longer 정보가 적힌 행이 나올 것이다.

          Since: Mon 2024-06-17 03:28:03 UTC; 2h 12min ago
          State: active
       Sessions: 35 *9
         Linger: yes