[Ubuntu] 서비스 등록 (systemd)

ggorockee·2024년 11월 18일

devops

목록 보기
1/7

매번 재시작할 때마다
1. minikube start
2. kubectl rollout restart ~
3. sudo iptables ~

등 이런 명령어를 매번 치는게 귀찮아서 이것을 ubuntu가 켜질 때마다 실행되는 명령어로 바꾸도록하겠습니다.

service를 이용할 건데 테스트할 스크립트를 만들도록할게요

cat <<EOF>> /home/ubuntu/startup.sh
#!/bin/bash
date >> /home/ubuntu/date_log.txt
exit 0
EOF

/etc/systemd/system/date_test.service 여기에 아래와 같이 파일을 만들게요

[Unit]
Description=Test Service
After=multi-user.target
StartLimitIntervalSec=1

[Service]
Type=simple
User=ubuntu
Group=sudo
WorkingDirectory=/home/ubuntu
ExecStart=/bin/bash startup.sh
Restart=on-failure
Restart=alwayes
RestartSec=1

[Install]
WantedBy=multi-user.target
  • User, Group / WorkingDirectory
    • [옵션] 프로그램 실행 유저 / 프로그램 작업 디렉터리
    • ExecStart 앞에 위치해야 설정이 적용됨
  • Restart=on-failure: 서비스 종료 시 자동 재시작
  • 필요 시 'Environment'로 환경변수를 설정할 수 있음
  1. 서비스 등록
# 서버 재부팅 시에 서비스 자동 시작
sudo systemctl daemon-reload
sudo systemctl enable date_test.service
# 서비스 시작
sudo systemctl start date_test.service
sudo rm -rf /home/ubuntu/date_log.txt
sudo reboot
cat /home/ubuntu/date_log.txt
# Mon Nov 18 00:51:46 UTC 2024
# Mon Nov 18 00:56:37 UTC 2024

아주 잘 작동하네요 이제 스크립트를 변경해서 사용하도록할게요. Make를 이용하겠습니다.

sudo apt-get -y install make
cat <<EOF>> Makefile
.PHONY: up
up:
        bash ./.start.sh

.PHONY: down
down:
        bash ./.down.sh
EOF
cat << EOF > .start.sh
#!/bin/bash

echo "telpoert service start!!"
sudo systemctl start teleport
sudo systemctl enable teleport

# sudo iptables -t nat -D PREROUTING {조회한 포워딩 내용 id 번호}
# sudo iptables -t nat -D PREROUTING 2

# sudo iptables -t nat -L --line-numbers
export PROFILE=camping
export SERVICEMESH_PORT=31031
export HEALTHCHECK_PORT=31021
export NETWORK_INTERFACE=ens5
export MINIKUBE_IP=192.168.49.2

minikube profile list
minikube start -p ${PROFILE}

echo "================================"
echo "[INFO] port-forwarding..."

# healthcheck portforwarding
sudo iptables -A PREROUTING -t nat -i ${NETWORK_INTERFACE} -p tcp --dport ${HEALTHCHECK_PORT} -j DNAT --to ${MINIKUBE_IP}:${HEALTHCHECK_PORT}
sudo iptables -A FORWARD -p tcp -d ${MINIKUBE_IP} --dport ${HEALTHCHECK_PORT} -j ACCEPT

# servicemesh portforwarding
sudo iptables -A PREROUTING -t nat -i ${NETWORK_INTERFACE} -p tcp --dport ${SERVICEMESH_PORT} -j DNAT --to ${MINIKUBE_IP}:${SERVICEMESH_PORT}
sudo iptables -A FORWARD -p tcp -d ${MINIKUBE_IP} --dport ${SERVICEMESH_PORT} -j ACCEPT

echo "[INFO] port-forwarding... Done"

# minikube service restart
echo "[INFO] minikube service restart..."

kubectl rollout restart deployments -n istio-system
kubectl rollout restart deployments -n metallb-system
kubectl rollout restart daemonsets -n metallb-system
kubectl rollout restart deployments -n argocd
kubectl rollout restart statefulsets -n argocd
echo "[INFO] minikube service restart... Done"
EOF
cat <<EOF > .down.sh
#!/bin/bash
export PROFILE=camping

minikube stop -p ${PROFILE}
EOF

이렇게 파일을 만들어주고

sudo su
cat <<EOF > /etc/systemd/system/camping.service
[Unit]
Description=minikube start
After=multi-user.target

[Service]
Type=simple
User=ubuntu
Group=sudo
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/make up
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable camping.service
reboot

다시 접속하고 다음 명령어를 날리면

sudo systemctl status camping
● camping.service - minikube start
     Loaded: loaded (/etc/systemd/system/camping.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-11-18 01:38:42 UTC; 4s ago
   Main PID: 1030 (make)
      Tasks: 10 (limit: 18714)
     Memory: 188.3M
     CGroup: /system.slice/camping.service
             ├─1030 /usr/bin/make up
             ├─1033 bash ./.start.sh
             └─1095 minikube start -p camping

Nov 18 01:38:43 ip-172-31-15-127 make[1064]: | Profile | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes | Activ>
Nov 18 01:38:43 ip-172-31-15-127 make[1064]: |---------|-----------|---------|--------------|------|---------|---------|-------|------>
Nov 18 01:38:43 ip-172-31-15-127 make[1064]: | camping | docker    | docker  | 192.168.49.2 | 8443 | v1.31.0 | Stopped |     3 |      >
Nov 18 01:38:43 ip-172-31-15-127 make[1064]: |---------|-----------|---------|--------------|------|---------|---------|-------|------>
Nov 18 01:38:43 ip-172-31-15-127 make[1095]: * [camping] minikube v1.34.0 on Ubuntu 20.04
Nov 18 01:38:43 ip-172-31-15-127 make[1095]:   - MINIKUBE_IP=192.168.49.2
Nov 18 01:38:44 ip-172-31-15-127 make[1095]: * Using the docker driver based on existing profile
Nov 18 01:38:44 ip-172-31-15-127 make[1095]: * Starting "camping" primary control-plane node in "camping" cluster
Nov 18 01:38:44 ip-172-31-15-127 make[1095]: * Pulling base image v0.0.45 ...
Nov 18 01:38:44 ip-172-31-15-127 make[1095]: * Restarting existing docker container for "camping" ...

다음과 같이 실행되게 된다.

0개의 댓글