DSM 6.0 에서도 사용 할 수 있는 방법을 올려 두었습니다.
현재 DSM 6 버전에서는 오류가 발생 한다고 합니다.
DSM 6 사용자는 해당 알림 기능을 사용하지 않으시는게 좋을것 같습니다.
복구가 필요 하신분은 아래 방법으로 복구 하시면 됩니다.
Download Station DB 복구 방법
psql -U postgres -d download
위 명령을 이용해서 psql 에 접속(?) 합니다.
다음 쿼리로 삭제 하시면 됩니다.
1. Trigger 삭제
DROP TRIGGER btdownload_event ON download_queue;
2. Function 삭제
DROP FUNCTION process_btdownload_event();
3. Table 삭제
DROP TABLE btdownload_event;
2015/08/20 일 15:40분부로 아래 코드가 수정되었습니다.
이전에 적용하셨던 분들은 btdownload_event 테이블을 삭제 하신 다음 다시 진행 하시면 됩니다.
psql -U postgres -d download -c "drop table btdownload_event;"
XPenology 의 Download Station 을 활용해서 사용중이다.
하지만 다운로드가 완료가 되어도 알람 메시지를 받을 수가 없어서 수시로 확인을 해주어햐 하는 불편함이 있다.
그래서 Download Station 을 분석하여 텔레그램을 이용해 다운로드 상태 알람 메시지를 받을 수 있게 되었다.
아마 XPenology 사용하는 사람들중에 Download Station 보다는 Trasminssion 을 설치해서 활용 하는 사람이 더 많을것이라 생각된다.
transmission 은 다운로드 완료시 특정 실행 파일을 실행 할 수 있는 옵션이 있다.
Download Station 도 대충 보면 Transmission 을 모토로 개발된것으로 보이지만 환경 설정이 불가능하다.
필자가 분석한 방법을 토대로 정리해본다.
Download Station 은 내부의 postgresql DB를 사용한다.
download DB의 download_queue 테이블을 가지고 작동하는것을 확인하였다.
해당 테이블을 분석하여 download_queue 테이블에 INSERT, UPDATE, DELETE 에 대해 Trigger 를 걸어 필자가 만든 함수를 실행 하도록 수정하였다.
적용 방법은 다음과 같다.
XPenology 의 SSH 에 접속한다.
다음 명령어를 수행한다.
psql -U postgres -d download
위 명령을 수행하면 다음과 같이 나오게 된다.
psql (9.3.6) download=# |
위 상태에서 다음 Query 문을 이용해 Table, Function 을 생성하고
download_queue 테이블에 Trigger 를 걸어주자.
순서대로 실행 되어야 한다.
1. CREATE TABLE
2. CREATE OR REPLACE FUNCTION
3. CREATE TRIGGER
CREATE TABLE btdownload_event( task_id integer NOT NULL, username character varying(128), filename text, status integer, total_size bigint, isread integer, create_time date ); CREATE OR REPLACE FUNCTION process_btdownload_event() RETURNS TRIGGER AS $btdownload_event$ DECLARE rec_count integer; BEGIN IF (TG_OP = 'INSERT') THEN RETURN NEW; ELSIF (TG_OP = 'UPDATE') THEN IF (NEW.status = 2 AND NEW.total_size > 0 AND NEW.current_size > 0) THEN SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 2; IF ( rec_count = 0 ) THEN INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now()); END IF; ELSIF (NEW.status = 5 ) THEN SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 5; IF ( rec_count = 0 ) THEN INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now()); END IF; ELSIF (NEW.status = 118) THEN UPDATE download_queue SET status = 5, extra_info = '' WHERE task_id = NEW.task_id; DELETE FROM task_plugin WHERE task_id = NEW.task_id; DELETE FROM thumbnail WHERE task_id = NEW.task_id; END IF; RETURN NEW; ELSIF (TG_OP = 'DELETE') THEN DELETE FROM btdownload_event WHERE task_id = OLD.task_id; RETURN OLD; END IF; RETURN NULL; END; $btdownload_event$ LANGUAGE plpgsql; CREATE TRIGGER btdownload_event AFTER INSERT OR UPDATE OR DELETE ON download_queue FOR EACH ROW EXECUTE PROCEDURE process_btdownload_event();
Copy가 안되는 분은 첨부 파일을 다운로드 한다.
위와 같이 하였다면
Download Station 에서 다운로드가 시작되었을때와 완료 되었을때 각각 btdownload_event 테이블에 다음 정보를 Insert 하게 된다.
1. Task ID - Download Station 에서 사용하는 Task ID이다.
2. user name - 다운로드를 요청한 DSM 사용자 ID
3. File Name - 다운로드 중인 토렌트의 제목
4. Status - 다운로드 상태 코드
5. Total_Size - 다운로드 중인 토렌트의 총 크기
6. isread - btdownload_event 테이블에서 읽었는지 여부를 표시 하기 위한 Flag 값
7. create_time - btdownload_event 에 insert 된 시간
psql 에서 \q 를 입력하여 psql 을 종료한다.
다음 경로로 이동한다.
cd /volume1/homes/user
user 는 자신의 계정이다.
/root 에서 작업하면 DSM 마이그레이션시 전부 날아가므로 주의
다음 Shell Script 를 저장한다.
마음껏 수정해서 쓰셔도 되지만 스크립트 최상단에 작성자 정보를 삭제 하지 말아주세요.
dsmonitor.sh
#! /bin/sh #------------------------------------------------------- # Created by Acidpop on 2015. . . # [author] acidpop(http://blog.acidpop.kr) # [version] v0.1 #------------------------------------------------------- FILE_NAME="/tmp/dsdown.txt" date "+%Y/%m/%d %H:%M:%S" > $FILE_NAME echo "DS DonwloadStation Monitor 서비스가 시작되었습니다" >> $FILE_NAME curl --form userfile=@$FILE_NAME --form password=5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8 http://192.168.0.199/tgcli.php while : do psql -U postgres -d download -t -A -c "SELECT * FROM btdownload_event WHERE isread=0;" | while read line do IDX=`echo $line | cut -d '|' -f1` USER_NAME=`echo $line | cut -d '|' -f2` TITLE=`echo $line | cut -d '|' -f3` STATUS_VALUE=`echo $line | cut -d '|' -f4` SIZE=`echo $line | cut -d '|' -f5` CREATE_TIME=`echo $line | cut -d '|' -f7` case $STATUS_VALUE in 1) STATUS="대기 중" ;; 2) STATUS="다운로드 중" ;; 3) STATUS="일시 정지" ;; 4) STATUS="종료 중" ;; 5) STATUS="다운로드 완료" ;; 6) STATUS="해시 체크" ;; 7) STATUS="시딩 중" ;; 8) STATUS="파일 호스팅 대기" ;; 9) STATUS="압축 해제 중" ;; *) STATUS="알 수 없는 코드 [$STATUS_VALUE]" ;; esac echo "상태 : $STATUS" > $FILE_NAME echo "파일 : $TITLE" >> $FILE_NAME CONV_SIZE=`echo $SIZE | awk '{ sum=$1 ; hum[1024**3]="GB";hum[1024**2]="MB";hum[1024]="KB"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'` echo "크기 : $CONV_SIZE" >> $FILE_NAME echo "사용자 : $USER_NAME" >> $FILE_NAME psql -U postgres -d download -c "UPDATE btdownload_event SET isread = 1 WHERE task_id = $IDX" curl --form userfile=@$FILE_NAME --form password=5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8 --form username=$USER_NAME http://192.168.0.199/tgcli.php done sleep 5 done
저장 하였다면 다음 명령을 이용하여 실행 권한을 주자.
chmod 755 dsmonitor.sh
위 Shell Script 는 5초에 한번씩 btdownload_event 테이블을 체크하여 isread 가 0인 항목을 가져와 /tmp/dsdown.txt 파일에 저장을 한다.
btdownload_event 테이블을 체크하는 Query 는 다음과 같다.
psql -U postgres -d download -t -A -c "SELECT * FROM btdownload_event WHERE isread=0;" |
그 후 해당 파일을 curl 을 이용하여 라즈베리파이의 php 로 전송한다.
라즈베리파이와 Telegram CLI, PHP 는 다음 강좌를 참고한다.
2015/08/13 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram - PHP를 이용하여 메시지 보내기
만약 PushBullet 을 사용중이라면 curl --form 라인의 코드를 다음과 같이 수정하면 된다.
BODY=`cat /tmp/dsdown.txt`
curl -u $token: https://api.pushbullet.com/v2/pushes -d type=note -d title="Download Station" -d body="$BODY" --insecure
BODY=`cat 이 부분의 ` 이 코드는 작은 따옴표가 아닌 키보드의 ~ 모양(숫자1 키 왼쪽) 키에 있는 기호이다.
/tmp/dsdown.txt 파일에 내용이 기록되므로 다양한 방법으로 알림을 사용 할 수 있을 것이다.
이제 위 Shell Script 를 데몬으로 실행 해야 하는데
dsmonitor.sh &
위와 같이 실행 하면 SSH 접속이 종료 될때 dsmonitor.sh 도 종료된다.
다음과 방법으로 실행 하면 된다.
/opt/bin/bash -c "/volume1/homes/user/dsmonitor.sh &"
Bash 를 이용해서 데몬으로 실행 하는 방법인데 만약 /opt/bin/bash 가 없다면
ipkg 를 이용해서 설치하자.
/opt/bin/ipkg install bash
XPenology 가 리부팅 되어도 위 스크립트를 데몬으로 항상 실행하게 하고 싶다면
다음 파일에 내용을 추가하자.
/etc/rc.local
위 파일을 vi 또는 nano 등 에디터로 열어
가장 마지막 줄에 exit 0 위쪽에 다음과 같이 추가해준다.
/opt/bin/bash -c "/volume1/homes/user/dsmonitor.sh &"
혹여 bash 설치를 못하시는 분들을 위해 shell Script 와 bash 파일을 압축하여 첨부한다.
※ 위 방법을 통해 XPenology 가 이상 작동을 하여도 필자는 책임 지지 않습니다.
중요한 정보가 저장되어 있다면 꼭 백업 하시고 작업하세요.
특히 download_queue 테이블은 건드리시면 안됩니다.
XPenology 의 알림 메시지 모두를 Telegram 으로 전송 받고 싶지만
도무지 Notify 메시지가 어디에 저장이 되는지 찾을 수가 없네요..
혹시 아시는 분은 댓글에 부탁드려요~!
XPEnology 바탕화면의 알림 메시지는 다음 경로에 json format 으로 저장된다
/usr/syno/etc/preference/userid/dsmnotify
userid 는 자신이 사용하는 계정 ID 이다.
DSM 5.2-5644 에서는 /etc/rc.local 파일이 없는 경우가 있다.
다음 경로로 이동
/usr/syno/etc/rc.d
#!/bin/sh
/volume1/homes/userid/bash /volume1/homes/userid/dsdown_monitor.sh &
userid 를 자신의 계정 ID로 변경 하고 다음 파일명으로 저장한다.
S99dsdownmonitor.sh
chmod 755 ./S99dsdownmonitor.sh
이렇게 sh 파일만 생성하면 부팅시 자동으로 실행 된다.
'강좌 > XPEnology 활용' 카테고리의 다른 글
XPEnology DSM 6.0 이상에서 다운로드 스테이션 텔레그램 알림 받기 (65) | 2016.08.29 |
---|---|
Git https 오류 해결 (0) | 2016.05.20 |
XPEnology SMS 알림을 텔레그램 봇으로 보내기 (3) | 2016.02.12 |
XPEnology 전용 Telegram BOT (65) | 2016.02.03 |
XPEnology SMS 알림을 텔레그램으로 보내기 (11) | 2016.01.04 |
XPEnology DSM 에 Telegram CLI 설치하기 (44) | 2015.09.01 |
DSM 알림(notify) 메시지 저장 위치 (3) | 2015.08.20 |
제로보드 XE에 새글,새댓글 알람을 Telegram 으로 받기 (0) | 2015.08.13 |