• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
정보

gluetun재시작 및 재부팅 시 연결된 컨테이너 자동 재시작 하기

병따개님 217

1

5

gluetun의 네트웍 아래 있는 컨테이너들은 시스템 재부팅하거나 gluetun이 종종 재시작 되면 네트웍 연결이 끊기는데요

 

아주 조잡하지만 그나마 자동으로 해결되는 방법입니다

 

gluetun의 uptime을 체크해서 1시간 이하면 torrent 컨테이너를 재시작 시키는 스크립트를 만들어서 스케쥴에 등록했습니다

 

# 모듈을 임포트합니다.
import docker
import datetime
import os
import subprocess

# 도커 클라이언트 객체를 생성합니다.
client = docker.from_env()

# 도커 컨테이너를 가져옵니다.
container = client.containers.get("gluetun")

status = container.status

# 컨테이너가 실행 중면 uptime을 계산합니다.
if status == "running":
    # 컨테이너가 시작된 시간을 가져옵니다.
    start_time = container.attrs["State"]["StartedAt"][:-4] + 'Z'
    # 현재 시간과 시작 시간의 차이를 계산합니다.
    uptime = datetime.datetime.now() - datetime.datetime.strptime(start_time, "%Y-%m-%dT%H:%M:%S.%fZ")
    # uptime을 시간 단위로 변환합니다.
    uptime_hours = uptime.total_seconds() / 3600
    # uptime을 소수점 둘째 자리까지 반올림합니다.
    uptime_hours = round(uptime_hours, 2)
else:
    # 컨테이너가 실행 중이 아니면 uptime을 None으로 설정합니다.
    uptime_hours = None
    # uptime을 출력합니다.
print(f"Uptime: {uptime_hours} hours")

# uptime_hours가 1보다 작은지 확인합니다.
if uptime_hours < 1:

    # deluge-vpn을 재시작 합니다
    os.system("docker compose -f /data/docker/deluge-vpn/docker-compose.yml restart")
    # 재시작 완료 메시지를 출력합니다.
    print("deluge-vpn restarted successfully")
else:
    # uptime_hours가 2보다 크거나 같으면 메시지를 출력합니다.
    print("gluetun uptime is not less than 1 hours")

 

제가 짠 코드는 아니고 chatgpt에게 만들어 달라고 했습니다

전 파이썬 할 줄 몰라요 ㅠㅠ

이걸 실행 하려면 파이썬과 모듈들이 설치 되어 있어야 됩니다 

이 코드를 delugevpn-restart.py 처럼 파이썬 파일로 저장 해주고 cron이나 systemd timer에 등록하면 됩니다

 

systemd timer에 30분마다 실행하게 해두니 아직까진 잘 작동 하네요

만약 잘 안되면 docker compose restart 말고 docker compose down후 조금 기다렸다가 docker compose up -d 로 바꾸면 될듯합니다

 

Xshell_IFW0lHtCYZ.png.jpg

 

테스트삼아 재부팅 해봤는데

systemd timer 로그에 업타임과 재시작 로그가 잘 나오네요

 

아주 조잡한 방법인데 어떻게 해야 되나 몰라서 이렇게 라도 해 뒀습니다

 

저같은 분들게 도움되길...

 

더 좋은 깔끔한 방법 있으면 알려주세요 ㅠㅠ

신고공유스크랩
5
1등
앨런임더 2023.10.15. 18:48
Compose 쓰시는 경우에는 각 컨테이너들에 depends_on: gluetun 옵션 추가하시면 gluetun 컨테이너가 시작된 이후 이에 의존하는 컨테이너가 시작됩니다.
병따개님 글쓴이 2023.10.15. 18:54
앨런임더

근데 vpn의 연결이 끊겨서 gluetun이 vpn 재연결을 위해 재시작 되었을시에는 그게 소용 없더라구요 ㅠㅠ

그래서 gluetun과 deluge를 하나로 안묶고 따로 만들어서 사용하고있어요

3등
목돌아간흑두루미 2023.10.30. 17:20
저도 depends_on이 안먹혀서 방법을 찾아봤는데 이런게 있네요

https://stackoverflow.com/questions/65778431/using-depends-on-doesnt-start-required-container-but-starts-containers-dependi

참고하시면 좋을 것 같슴다
병따개님 글쓴이 2023.10.30. 23:30
목돌아간흑두루미
depends_on은 컨테이너를 시작 할때만 적용이 되서 gluetun이 watchtower로 업데이트 되거나 vpn연결이 끊어져 재연결을 하게 되면 소용이 없더라구요
글을 쓴 이후로 도커만으로 해결 할 방법이 없을까 알아보다가 다른 방법을 만들긴 했습니다
gluetun과 deluge를 하나의 compose파일에 묶으면 docker restart가 먹히고 따로 만들면 docker restart가 안먹힙니다
따로 묶었을 때 gluetun이 재시작 되면 기존의 네트워크가 지워지고 새로 만들어져서 deluge를 재시작 하려 시도하면 에러가 나는 듯해서 gluetun에 고중 network을 하나 잡아주고 유지되게 만들었네요

요약하면 netwok 만들어서 할당해주고 autoheal로 헬스체크해서 문제 생기면 자동으로 재시작하게 해두고 잘 되나 체크 중입니다

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
번호 분류 제목 글쓴이 날짜 조회 추천
가이드 배드섹터 있는 HDD 복사 및 이미지 뜨기 : ddrescue, ddrescueview 3 klayf 2일 전14:16 230 +11
오픈소스 개인 구독 추적기 Wallos 9 달소 5일 전23:26 455 +3
질문 /var/www 폴더가 삭제되었습니다. ㅜ,.ㅜ 2 니속사정 24.05.06.20:42 329 +1
456 정보
image
지딱코 24.05.02.14:31 260 +1
455 정보
image
달소 24.05.01.05:38 161 0
454 정보
image
달소 24.04.25.08:21 196 +1
453 정보
normal
행복구슬 24.04.07.13:38 1284 +5
452 정보
image
DarkAcid 24.03.30.09:32 345 +2
451 정보
image
달소 24.03.28.22:48 193 +1
450 정보
image
Razorbacks 24.03.28.18:06 177 +1
449 정보
image
툭툭이 24.03.28.11:14 953 +17
448 정보
image
서맹 24.03.10.15:34 346 +1
447 정보
normal
서맹 24.03.09.17:09 223 +1
446 정보
image
달소 24.03.09.05:27 60 0
445 정보
image
달소 24.03.08.16:02 206 +2
444 정보
normal
서맹 24.03.08.15:15 189 +1
443 정보
normal
SHISHAMO 24.03.03.16:08 500 +1
442 정보
image
똥쓰똥쓰 24.03.01.13:15 669 +3
441 정보
image
honey720 24.02.28.00:20 255 +6
440 정보
image
권씨아저씨 24.02.24.21:41 206 +1
439 정보
image
콜라 24.02.23.16:30 153 +1
438 정보
normal
very 24.02.23.13:54 162 0
437 정보
normal
KelvinKang 24.02.20.20:35 117 +1