Enterprise IT Solutions/Linux

[리눅스] systemd 서비스 유닛 파일 작성 및 관리 방법

iseop 2025. 5. 17. 13:59

무료 DDNS 서비스 제공업체인 https://no-ip.com/의 서비스를 이용하려면 Dynamic Update Client를 내려받아 사용해야 한다. 바이너리만 달랑 주기 때문에 프로세스가 죽었는지 살았는지 모니터링도 귀찮고, 재부팅 시 자동으로 실행되지도 않기 때문에 systemd에 service unit으로 등록해서 사용하는 방법을 정리해 보았다.

 

Free Dynamic DNS - Managed DNS - Managed Email - Domain Registration - No-IP

System Admins Managed DNS — Experience robust, scalable DNS solutions tailored for businesses of all sizes. Designed to enhance system reliability and performance, ensuring your operations always run smoothly. Learn More Home Networks Dynamic DNS — Gai

www.noip.com

 

1. 일단 noip-duc 바이너리를 받아서 적절한 위치에 둔다. 나는 /usr/bin/ 밑에 두었다.

 

2. /etc/systemd/system/noip-duc.service 파일을 만든다. 내용은 아래에서 설명한다.

[Unit]
Description=No-IP Dynamic Update Client
After=systemd-networkd-wait-online.service
Wants=systemd-networkd-wait-online.service
ConditionPathExists=/usr/bin/noip-duc

[Service]
Type=simple
ExecStart=/usr/bin/noip-duc -g 그룹명 --username 사용자명 --password 패스워드
Restart=on-failure
ExecStartPre=/bin/sleep 10

[Install]
WantedBy=multi-user.target

 

[Unit] 이라는 섹션에는 이게 어떤 서비스인지, 어떨 때 실행되는지 적는다. Wants에는 이 서비스가 의존하는 서비스를 적는데, 네트워크가 올라와야 하므로 우분투 24.04 기준 저걸 적었다. After는 마찬가지로 저거 다음에 실행되게 해달라는 의미다.

 

[Service] 섹션에는 이 서비스의 실체에 대해 적는다. ExecStart에 실행 명령만 잘 적으면 보통 잘 실행된다. ExecStartPre를 적은 이유는 인터넷 연결 시간을 고려해서 그렇게 했다.

 

[Install] 섹션에서는 이 서비스 유닛 파일의 심링크를 어디에 설치할지 정하는데, 일반 부팅 모드가 multi-user 모드이므로 저렇게 적었고, 이런 경우 심링크는 multi-user.target.wants/ 디렉터리에 생성되어 정상 부팅 시에 내가 만든 서비스가 자동으로 올라오게 되는 것이다.

 

3. 잘 되는지 확인해 보자.

$ sudo systemctl enable noip-duc
$ sudo systemctl start noip-duc
$ sudo systemctl status noip-duc
● noip-duc.service - No-IP Dynamic Update Client
     Loaded: loaded (/etc/systemd/system/noip-duc.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-00-00 00:00:00 UTC; 00min ago
   Main PID: 000000 (noip-duc)
      Tasks: 1 (limit: 28022)
     Memory: 0.0M (peak: 0.0M)
        CPU: 00ms
     CGroup: /system.slice/noip-duc.service
             └─111179 /usr/bin/noip-duc -g X --username X --password X

May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:38Z INFO  noip_duc::public_ip] Attempting to get IP with method Dns(No-IP Anycast DNS Tools)
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:38Z INFO  noip_duc::observer] got new ip; current=9.9.9.9, previous=0.0.0.0
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:39Z INFO  noip_duc::observer] update successful; current=9.9.9.9, previous=0.0.0.0
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:40:39Z INFO  noip_duc::observer] checking ip again in 5m
May 00 00:00:00 server noip-duc[111179]: [2025-05-17T04:45:39Z INFO  noip_duc::public_ip] Attempting to get IP with method Dns(No-IP Anycast DNS Tools)