보통은 만들일이 없는데, 특이한 일을하려면 좀 필요하다.
필자의 경우는 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