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


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