기본 콘텐츠로 건너뛰기

추천 가젯

리눅스 홈서버 알림용 텔레그램 봇(Telegram Bot) 연동 및 쉘 스크립트 구축 가이드

개인 홈서버를 운영하다 보면 백업 완료 여부나 시스템 에러 같은 단방향 알림을 스마트폰으로 빠르게 받아보고 싶어집니다. 외부 메일 서버나 복잡한 SMTP 설정을 거치지 않고, 가장 확실하고 가볍게 쓸 수 있는 텔레그램 봇을 이용한 홈서버 알림 구축 방법 을 정리합니다. 1단계: 텔레그램 봇 생성하기 (BotFather) 텔레그램 앱을 켜고 상단 검색창에 BotFather 를 검색하여 공식 봇(파란색 체크마크 확인)을 엽니다. 대화창에 아래 명령어를 입력하여 새로운 봇을 만듭니다. Plaintext /newbot 봇의 이름(Name)을 입력합니다. (예: My Home Server Bot ) 봇의 아이디(Username)를 입력합니다. (반드시 영문이며 끝에 bot 또는 _bot 으로 끝나야 합니다. 예: my_home_backup_bot ) 생성이 완료되면 HTTP API 토큰(Token)이 발급됩니다. 이 토큰을 안전하게 보관합니다. 2단계: 내 Chat ID(채팅방 고유 번호) 확인하기 텔레그램은 보안상 사용자가 먼저 봇에게 말을 걸어야 메시지를 받을 수 있으며, 봇이 나에게 메시지를 보내려면 고유 Chat ID 가 필요합니다. 텔레그램 검색창에 userinfobot 을 검색하여 들어갑니다. 하단의 [시작하기] 버튼을 누르면 내 계정의 정보와 함께 Id (숫자) 값을 알려줍니다. 이 숫자를 복사해 둡니다. [중요] 1단계에서 만든 내 봇의 아이디(예: @my_home_backup_bot )를 검색해서 대화창을 열고, [시작] 버튼을 누르거나 아무 메시지나 먼저 한 번 전송해 둡니다. 3단계: 리눅스 쉘 스크립트 작성 및 테스트 서버(터미널)에서 환경변수를 설정하고 curl 명령어를 통해 테스트 메시지를 보낼 수 있습니다. 특히 인자값이 없을 때를 대비해 기본값 처리를 해두면 유용합니다. 아래 내용을 포함하는 쉘 스크립트 파일(예: send_telegram.sh )을 작성합니다. Bash #!/bin/bash # 환경변수 설정 (실제 토큰과 C...

시스템 시작시(부팅시) 자동실행된 docker가 바로 실행되지 않는 문제를 어떻게 해결해야 할까??




내가 있는 다체계물리연구실에서 오랜기간 동안, sun grid engine 구축을 노력해왔다. 수많은 시도가 있었지만 tftp를 이용한 diskless grid는 구축을 하지 못했지만,   결국에 유의미한 결과를 얻었다.


Ubuntu내에서 apt로 또는 fedora(오래된 과거)에서 rpm으로는  설치했을 때, 뭔가, 라이브러리의 버전관리 문제가 걸려서 아무일도 일어나지 않는다.


결국은 docker라는 툴을 이용해서, centos를 기반으로 구축을 완료했다.

문제는 각 서버를 재시작할 시, 자동으로 다시 실행되도록 셋팅을 해놓았으나, 그렇지 않는다는 것이다.


네트워크 작업이 귀찮아서, 내부의 docker가 22번 포트를 쓰도록하고, 디바이스는 다른 포트를 사용하도록 해놓은 탓에, ssh로 로그인을 하고, 다시 작업하기는 매우 귀찮다. 그것도 최근에 안 사실이지만 그 작업도, docker 명령을 실행만 하면 되는 작업이다.

이유를 알 수 없지만, docker명령이 최초 실행되기 전까지, docker daemon은 메모리에만 가상 시스템을 올려놓고, 실행은 되지 않고 있다.


지금은 컴퓨터가 작아서 하나씩 들어가서 docker ps 명령을 실행했다지만, 컴퓨터가 많으면 매우 귀찮은 작업일 것이다.

나만 그런가 싶어, 구글링을 해보니 docker에 가장 적합한 CoreOS에도 있는 Bug라고 한다. CoreOS에도 있다는 소리는 그냥 Docker의 버그로 보이며, 어떤 곳에도 원래 그렇게 작동한다는 이야기는 없다.

그래도 각 사람들이 알아서 해답을 찾았고 그 방법을 적용하였다.

그 방법은 정말 간단하다. 그냥 ... systemctl을 이용해 최후단에 단발로 작용하는 데몬 하나를(언어도단이지만)  띄우는 것이다.



[Unit]
After=default.target

[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes

[Install]
WantedBy=default.target


이 간단한 것을 생각지 못한다니, 참...유감이다. 

뭐 그렇지만, 이전까지는 왜 docker가 올라와 있는데도 접속이 안되는지에 대해서 고민을 해왔으니, 제대로 문제를 파악한 기간이 짧았던 것으로 변명하면 되지 않을까...

댓글