게으른 서버 관리자를 위한 Push Notification

짤막하고 허접한 python 프로그램을 하나 만들었기에 소개합니다.

모바일 app 중에 PushBullet이라는 notification app을 개인적으로 잘 쓰고 있는데, 여기에 서버 쪽에서 이벤트 기반으로 메시지를 뿌릴 수 있도록 한 간단한 commandline app입니다.

  1. 들어가며

이 짧은 python 프로그램은 서버의 이벤트를 모바일 스마트 폰 혹은 PC로 notification 하기 위한 간단한 명령행 프로그램입니다. 사용자 쪽의 클라이언트는 PushBullet 이라는 무료 모바일 용 앱을 사용하고 있으며, 프로그램 자체도 PushBullet의 API를 사용한 것입니다. 따라서 이 프로그램을 사용하려면 사용자의 단말에 PushBullet이 설치되어 있어야 합니다.

이 프로그램은 python 2.7 이상의 linux에서 동작하며 특별한 dependancy는 없습니다. xubuntu 14.04 + python 2.7에서 작성했지만 특별한 dependancy가 없기에 다른 배포판(혹은 Mac)에서도 제대로 작동할 걸로 생각합니다.(아마도 python 3.0 이상에서는 약간의 에러를 낼 가능성이 있습니다.)

  1. 설치하기 전에

PushBullet은 사용자가 사용하고 있는 다양한 기기 간에, 혹은 사용자-사용자 사이에 간단한 텍스트 메시지나 25mb 미만의 파일을 자유롭게 전송할 수 있는 서비스입니다. PushBullet에 대한 정보는 https://www.pushbullet.com/ 에서 찾을 수 있습니다. PushBullet은 다양한 OS 환경을 지원하고 있으며 무료입니다.

Android 용 : [url:2kvjuq9q]https://play.google.com/store/apps/details?id=com.pushbullet.android[/url:2kvjuq9q]
iOS 용 : [url:2kvjuq9q]https://itunes.apple.com/us/app/pushbullet/id810352052[/url:2kvjuq9q]
FireFox용 플러그인 : [url:2kvjuq9q]https://addons.mozilla.org/en-US/firefox/addon/pushbullet/versions/[/url:2kvjuq9q]
Chrome Browser 플러그인 : [url:2kvjuq9q]https://itunes.apple.com/us/app/pushbullet/id810352052[/url:2kvjuq9q]
PC-Windows용 : [url:2kvjuq9q]https://update.pushbullet.com/pb_install.exe[/url:2kvjuq9q]

등이 공식적으로 제공되며, ubuntu 14.04 및 Linux Mint 17 용의 indicator는 PPA로 지원됩니다. PPA를 통한 PushBullet Indicator의 설치는 다음과 같습니다.

[code:2kvjuq9q]sudo add-apt-repository ppa:atareao/atareao
sudo apt-get update
sudo apt-get install pushbullet-indicator[/code:2kvjuq9q]

PPA를 통한 PushBullet의 설치와 설명은 [url:2kvjuq9q]http://itsfoss.com/pushbullet-indicator-ubuntu/[/url:2kvjuq9q] 를 방문하시면 볼 수 있습니다.

  1. 설치

이하의 내용은 위의 설명에 따라 pushbullet.com의 서비스에 가입하고 적어도 하나의 클라이언트가 설치되어 있다는 것을 전제로 합니다.

  1. push.py.tar.gz을 적당한 곳에 풀어놓습니다. 주의할 점은 실행파일인 push.py와 설정 파일인 push.ini가 반드시 같은 디렉토리 내에 존재해야 한다는 것입니다. 또한 당연한 것이겠지만 push.py는 실행권한이 부여되어 있어야 합니다.
  2. push.ini를 gedit나 vi 등으로 열어 token 부분을 편집합니다. 이 token은 push를 받을 클라이언트를 인증하기 위한 것입니다. 본인의 token을 찾기 위해서는 https://www.pushbullet.com/account 를 방문하시면 Access Token 항목에서 본인의 token을 찾을 수 있습니다. 이것을 복사하여 push.ini의 token 항목에 넣으시면 됩니다. 아래의 예를 보십시오.

[quote:2kvjuq9q]token = v13gG6pHbP8NmInJZ9TGFRVy3246ABSnkpW1I[/quote:2kvjuq9q]
만약 두명 이상의 사용자가 동일한 message를 받으려면 아래와 같이 쉼표(,)로 구분된 token을 나열하면 됩니다.

[quote:2kvjuq9q]token = v13gG6pHbP8NmInJZ9TGFRVy3246ABSnkpW1I, x13gG6prtOsdfmInJZ9TGFRVy3246ABSnkpW1I[/quote:2kvjuq9q]

이렇게 설치를 끝냅니다.

  1. 사용법

기본적인 사용법은 push.py -h 혹은 push.py --help 명령으로 볼 수 있습니다. 기본적인 사용법의 예는 다음과 같습니다.

[quote:2kvjuq9q]push.py -t "테스트 입니다" -b "다운로드가 끝났습니다" -l "http://www.myserver.com/download.html"[/quote:2kvjuq9q]
다음과 같은 옵션들을 사용할 수 있습니다.

[list:2kvjuq9q]-t (혹은 --title) : 메시지의 제목입니다. 이 옵션은 필수이며 제목이 없는 메시지는 발신되지 않습니다.[/list:u:2kvjuq9q]
[list:2kvjuq9q]-b (혹은 --body) : 메시지의 본문입니다. 생략가능한 옵션이며 메시지의 본문을 넣어주면 됩니다… 그리고 이 -b 옵션에 텍스트 파일을 절대경로로 지정하면 해당 텍스트 파일의 내용이 본문에 들어가게 됩니다. 아래의 예를 보십시오.

[quote:2kvjuq9q]push.py -t "테스트 입니다" -b "/home/ubuntu-user/test.txt"[/quote:2kvjuq9q]
이렇게 사용하면 /home/ubuntu-user/test.txt의 내용이 body에 들어간 메시지를 생성하여 전송합니다. 만약 지정된 파일이 text가 아니라면 HTTP Error를 내면서 전송되지 않습니다.[/list:u:2kvjuq9q]
[list:2kvjuq9q]-l (혹은 --link) : 이 옵션은 인터넷 웹 url을 전송합니다. -b 옵션과 마찬가지로 생략가능합니다. 클라이언트 쪽에서 이런 형식의 메시지를 받으면 자동적으로 해당 링크를 웹브라우저로 열어줍니다만, 주의할 점은 전송되는 url이 비정상적이거나 클라이언트가 접근할 수 없는 url일 경우는 에러를 내면서 메시지 자체를 볼 수 없게 됩니다.[/list:u:2kvjuq9q]
[list:2kvjuq9q]-h (혹은 --help) : 간단한 gnu 스타일의 도움말을 볼 수 있습니다.[/list:u:2kvjuq9q]
[list:2kvjuq9q]–version : 이 프로그램의 현재 버전을 볼 수 있습니다.[/list:u:2kvjuq9q]

  1. 마치며

원래 이 프로그램은 게으른 관리자(접니다…)가 서버의 특정 이벤트를 모바일 폰에서 받아볼 수 있도록 하기 위해 만든 것입니다.

예를 들어 서버에 걸어놓은 torrent 다운로드가 끝나면 알림을 받는다든가, 시간이 오래 걸리는 backup이나 인코딩 등의 작업이 끝났을 때 알림을 받거나, cron을 이용하여 서버의 log의 일부분을 매일 특정 시간에 전송받는 등 지금까지 서버 쪽에서 SMS나 메일을 이용하여 알림을 받던 것의 확장판이라고 보시면 됩니다.(거의 실시간으로 notification이 되는데다가, 무엇보다 공짭니다!) 따라서 사용자가 간단한 쉘스크립트 등을 이용하여 서버의 특정 이벤트에 따라 동작하게 한다면 많은 활용이 가능하리라고 봅니다.

또한 PushBullet이 제공하는 API는 위에서 사용한 것 외에도 파일 전송 등을 하기 위한 API도 공개되어 있기에 추가적인 확장도 가능하리라고 생각합니다만… 원래 필요로 하는 부분이 딱 이 정도인데다가 워낙 게으르다보니…

이 간단한 python 프로그램의 라이센스는 GPL 3.0에 따릅니다. 자유롭게 사용하시고 변형하셔도 됩니다만 개선하신 부분은 다른 분들이 사용하실 수 있도록 공개해주시기 바랍니다.

딱 나에게 필요한 프로그램이네요
난 올래 습성이 괴을려서 뭐든 방치 잘하고 잘 되는지 확인도 잘 안해요…

감사 합니다
쓰다 질문있으면 던질게요 ㅎ

push bullet notification을 잘 쓰고 있었는데, 이렇게 응용해서 융합할 생각까지는 못했네요.
평소 가려운 부분을 시원하게 긁어 주는, 아주 쓸모있는 글을 소개해 줘서 참 고맙습니다.

덕분에 잘 쓰겠습니다.