Home » OS » 리눅스 » ubuntu systemctl service 등록 방법을 알아봅시다.

ubuntu systemctl service 등록 방법을 알아봅시다.

보통, 패키지를 깔면 자동으로 서비스 등록을 해 줍니다. 그런데, 경우에 따라서 바이너리로 설치하는 경우에는, 이를 직접 해 줘야 할 때도 있어요. 이 글에서는 ubuntu systemctl service 등록 방법을 알아보겠습니다.


서비스 프로그램 등록하기

사실, postgresql 이라던지, elastic search 등의 서비스를 생각하기 쉬워요. 이 글에서는 그냥, 무한 루프를 도는 프로그램을 띄우도록 하겠습니다.

[그림 1] 간단한 프로그램

이 service.py 파일은 /home/cho에 있어요. python3 /home/cho/service.py 명령어를 입력하면, 이 프로그램이 실행되어서 계속 돌아갑니다. 우리의 목표는 이를 서비스로 등록해서, 부팅이 될 때 마다 실행되게끔 하는 것이에요.

/usr/lib/systemd/system에 test.service 파일을 생성해 봅시다.

[그림 2] test.service 파일

먼저, Description에 Test라고 입력하겠습니다. 다음에, Service에 ExecStart가 있는데요. 이 글에서는 이 옵션만 다룹니다. 두 번째로 killMode를 process로 한 것은, 서비스가 종료될 때 process만 종료되게 하기 위해 그리 적어두었습니다.

  • ExecStart
    • 서비스가 시작될 때 명령어를 의미합니다.

/home/cho/service.py가 우리가 실행시키려는 스크립트입니다. 고로, ExecStart에는 아래와 같이 적어주었습니다.

  • python3 /home/cho/service.py

다음, Install 탭에 WantedBy에 multi-user.target이 적혀져 있습니다. 언제 이 서비스가 시작될 것인지를 나타내는데요. 추후에 자세히 다루겠습니다.

[그림 3] 추가된 test.service

usr/lib/systemd/system에 test.service가 추가되었음을 볼 수 있습니다. 이제 등록을 해 보겠습니다.

[그림 4] enable 명령어로 서비스 활성화 시키기

systemctl enable test 명령어를 입력하면, 서비스가 활성화가 되는데요. 이 과정에서

  • /etc/systemd/system/multi-user.target.wants/test.service에서
  • /lib/systemd/system/test.service로 링크가 걸렸습니다.

이 폴더들에 대한 것도 추후에 다룰 일이 있을 겁니다. 여기에서는 그냥 이런 일이 일어나네. 정도만 보고 가도록 하겠습니다.

[그림 5] test 서비스를 시작하기

test를 enable 시키고, start를 시킨 다음에 systemctl status 명령어로 상태를 보니까, 돌아가고 있음을 볼 수 있어요. 여기까지 내용을 정리해 봅시다. 저는 새로운 test 서비스를 실행시키기 위해서 아래와 같이 처리하였습니다.

  • 디렉토리 /usr/lib/systemd/system제가 정의한 test.service 파일을 추가했습니다.
  • systemctl enable test로 서비스 test를 활성화 시켰습니다.
  • systemctl start test로 test를 시작하였습니다. test는 데몬이 되었습니다.

여기까지 ubuntu systemctl service 등록 방법이였습니다. 이제, 다음으로 넘어갑시다.


서비스 정의 바꾸기

그런데 service.py가 service2.py로 바뀌었습니다. 어떻게 해야 할까요?

[그림 6] service.py 파일을 home 디렉토리에서 찾기

그러면 test.service 파일도 다시 작성해야 합니다.

[그림 7] 다시 작성한 서비스 정의

다른 건 동일하고 ExecStart만 살짝 달라졌습니다. /home/cho에 있는 service.py 대신에 service2.py를 실행시키는 것으로요. 이제, 이 바뀐 파일을 기준으로 실행시키겠습니다. systemctl stop test로 test를 정지시킵니다.

[그림 8] daemon-reload하기

daemon-reload 명령어를 사용하면, 시스템 정의 파일을 다시 로드할 수 있습니다. 다음에 test를 다시 시작하겠습니다.

[그림 9] 바뀐 정의에 맞게 실행된 서비스

CGroup을 보면, 5551 python3 … service2.py가 보입니다. 바뀐 정의인 service2.py가 실행되었음을 의미합니다.

Leave a Comment

8 + 18 =