기본 콘텐츠로 건너뛰기

추천 가젯

리눅스 홈서버 알림용 텔레그램 봇(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...

원상이 워크스테이션 ryzen5 2600으로 변경.(pbzip2 test)

SMT(하이퍼쓰레드) 성능이 과장인가 쓸만한가 확인을 해봄.




pbzip2  bzip2


/tmp$ time tar -I pbzip2 -cvf a.tar.bz '(alpha=1,d='*  (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    0m17.179s
user    3m13.663s
sys     0m4.838s

/tmp$ time tar -I bzip2 -cvf a.tar.bz '(alpha=1,d='*      (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    2m16.867s
user    2m16.205s
sys     0m2.733s
일단 bzip2 pbzip2 테스트에서는 따로 프로세서 개수 같은 옵션을 주지 않아도 적당히 잘 최적화해서 돌아감.  

일단 대략 6C/12T에서 8배 정도의 성능 이득을 보고 있음.
(원상이 결과파일이 어떻게 생긴지 관심이 없지만 일단 bzip이나 gzip이나
둘다 465MB로 압축이 되므로 딱히 이거 쓸 이유는 없음)

pigz /gzip


/tmp$ time tar -I pigz -cvf a.tar.gz '(alpha=1,d='*  (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    0m5.315s
user    0m37.190s
sys     0m2.640s
/tmp$ time tar -I gzip -cvf a.tar.gz '(alpha=1,d='*      (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    0m20.482s
user    0m19.309s
sys     0m1.886s
/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.90
user 32.34
sys 2.09
bzip2 계열과 다르게 여기는 알고리즘이 어떻게 되어 있는지 모르겠지만, 병렬효율이 지나치게 떨어짐. 6C12T로 4배정도의 성능 이득 밖에 없음.  근데 원래 빠른게 더 빨리 끝나는거라. 그리 나쁘지 않음. 
  그래도 코어수보다 성능이 떨어지길래 테스트 해본결과 processor 개수를 10개까지 늘리는 동안에는 조금이라도 빨라지기는 함.  이 테스트는 효율이 워낙 떨어지다보니 외국 포럼에서 해석하기로는 가상코어를 코어수로 인식하지 못하는게 아닌가 라는 추축이 있었서 진짜 그런가 확인해 본 것임.  불도저나 옛날 코어 시리지에 대한 글이긴 했지만... 나도 느리길래 한번 해본것 

일단 코어하나만 써도 pigz쓰면 15%정도의 오버헤드가 생기고, 효율이 극히 떨어지고 뭔가 성능변화도 연속성이 이상함. 아무래도 pigz 코드에 뭔가 이상한게 많이 있나봄. (뭐 한계속도인듯 나중에 다른해석도 있음)


일단 알 수 있는 것, 적당히 잘 짠 코드의 경우, 6C12T 라이젠의  경우  8배 정도의 성능이득이 있음. (그냥 압축파일 짜르는 사이즈 마다 나눠놓고 각자 쓰레드에 일 맡기는 거라 효율이 좋을 수 밖에... )

원상이 코드 기준으로 눈대중으로 q9550보다 대략 2~2.5배 정도 빠름. 
10년도 더 된 cpu랑 비교해서 미안하지만 원상이가 계산 느리다고 해서 산거니까... 충분히 이득...   
비교대상은 윈도우에서 visual c로 Realease한 거랑 gcc로 optimize option 안주고 한거를 비교한거라, -O3, -O2정도면 3배까지도 차이날 수 있음. 

걍 때려박는 성능차이가 2배정도 나고, 세대차이로 인한 명령어 차이가 또 한 1.5배 해서 차이가 나는 것으로 예상됨. 


음 pigz가 pbzip2의 비해 병렬 효율이 매우 떨어지는것 처럼 보여도, pigz를 쓰는게 건강상 좋음. ..(일단 결과가  2.5GB의 데이터이기 때문에 이미 디스크 한계속도의 도달한거라 저 오버헤드는  sata3로 연결된 SSD의 오버헤드일 가능성이 크긴함... 이라고 생각했으나 작업 장소가... /tmp라서... 그냥 구린건가... 
사이즈가 워낙 크니까 /tmp가 어떤식으로 구성이 되있는지를 모르니... 

그냥 빨리 끝나니까 프로세서수 생각하지말고 pigz로 압축하자... 대략 30기가에 1분이라고 생각하면 겁나 빠른거니까... 1분이 4분이 되고, 1시간이 4시간이 된다고 생각하면 이거 쓰게 되어 있음. 



---------------------------------------------------------------------------





wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 12'  -cvf a.tar.gz '(alpha=1,d='*
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 5.47
user 37.23
sys 2.74
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 1'  -cvf a.tar.gz '(alpha=1,d='*   
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 23.30
user 22.34
sys 1.75
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 4'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 6.55
user 24.53
sys 2.64
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 5'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 5.66
user 25.80
sys 2.25
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 8'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 4.29
user 29.35
sys 2.26
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.87
user 32.25
sys 2.16
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 12'  -cvf a.tar.gz '(alpha=1,d='*   
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 5.78
user 37.36
sys 2.68
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.89
user 32.44
sys 2.05
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 11'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 4.03
user 33.52
sys 2.38
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 9'  -cvf a.tar.gz '(alpha=1,d='*   
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 4.07
user 31.06
sys 2.14
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.90
user 32.34
sys 2.09




댓글