/etc/passwd 수정이 끝났다면 다음 명령으로 DownloadStation 계정으로 로그인 할 수 있다.
su - DownloadStation
위 명령을 수행 하고 whoami 명령을 이용해서 DownloadStation 계정으로 로그인 되었는지 확인 한다.
9. 알림을 받을 Table 및 트리거 생성하기.
DownloadStation 계정으로 로그인 되었다면 아래 명령을 이용해서 postgresql 에 접속 한다.
psql -U DownloadStation -d download
명령을 수행 하면 다음과 같은 화면을 볼 수 있다.
psql (9.3.6)
Type "help" for help.
download=#
위 상태에서 다음 Query 문을 이용하여 Table, Function, Trigger 를 생성한다.
다음 순서 대로 Query 문을 복사/붙여넣기 한다.
1. Create Table.
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
);
2. Create OR Replace function
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.current_size > 0 AND NEW.total_size > 0 AND NEW.current_rate > 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;
ELSIF (NEW.status = 123) THEN
SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 123;
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;
END IF;
RETURN NEW;
ELSIF (TG_OP = 'DELETE') THEN
IF (OLD.status = 2) THEN
INSERT INTO btdownload_event VALUES(OLD.task_id, OLD.username, OLD.filename, 999, OLD.total_size, 0, now());
ELSE
DELETE FROM btdownload_event WHERE task_id = OLD.task_id;
END IF;
RETURN OLD;
END IF;
RETURN NULL;
END;
$btdownload_event$ LANGUAGE plpgsql;
3. Create Trigger
CREATE TRIGGER btdownload_event
AFTER INSERT OR UPDATE OR DELETE ON download_queue
FOR EACH ROW EXECUTE PROCEDURE process_btdownload_event();
Query 가 성공적으로 끝났다면 \q 를 입력하면 psql 이 종료 된다.
10. root 계정으로 전환 후 xpebot 설치 하기
exit 명령을 이용해서 root 계정으로 다시 돌아온다.
혹시 root 계정으로 돌아오지 않는다면 ssh 접속을 종료하고 다시 접속하여
sudo -i 명령을 이용해 root 계정으로 로그인한다.
다음 명령을 이용해서 사용자 홈 경로로 이동한다.
volume 은 사용자 환경에 맞게 volume1, volume2 등으로 구성 되므로 자신의 홈 디렉토리가 어디에 설치 되어 있는지는 알아야 한다.
cd /volume1/homes/admin
위 명령에서 admin 은 자신의 dsm 로그인 ID 이다. 각자 ID에 맞게 수정해서 수행한다.
안녕하세요 우선 자세한 설명덕분에 텔레그램으로 알림을 받는데 까지는 성공을 하였습니다.
신기하여 이것저것 눌러보다가 명령어 중에 토렌트서치가 있어 검색한뒤에 다운을 받고 다시 다른명령을 준뒤로 알림이 먹통이 되었습니다.
https://github.com/acidpop/xpebot 에서 보면 캔슬하지 않고 실행하는 오류를 수정했다는데 적용이 안된건지. 아니면 다른 원인이 있는건지 알고싶습니다.
명령을 수행할때 stop 되게 설계 되어있지는 않습니다만
torrentsearch 명령이나 magnet 등록과 같이 downloadstation 에 db insert 구문을 수행하게 되면 dsm 측에서 해당 프로세스를 강제로 종료하는 현상이 있습니다
torkim 명령을 사용하시는걸 추천드려여
지금까지 http://blog.acidpop.kr/241 의 xpebot monitor 를 활용해보려 했는데
제가 bash shell을 잘 몰라서 그런지... 설치된 경로를 제대로 변경했는데도 작동을 안하더라고요...
혹시 xpebotmonitor.sh와 작업 스케쥴러를 이용하여 ./bot.sh start를 해주게 할 순 없을까요?
저도 luna1474 님과 동일한 증상이 발생했네요 chk 해보면 stopped 라고 뜨는데 메신저에서 말을걸면 대답을 하네요..
2017-03-18 00:21:15 [ERROR] download_db_timer Exception : Traceback (most recent call last):
File "/volume1/homes/yhchoi/xpebot/dsdownload.py", line 399, in download_db_timer
self.curs.execute(query)
OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
2017-03-18 00:21:15 [ERROR] error ---- server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
, -1
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:21 [ERROR] dsdownload db_connect error
2017-03-18 00:21:21 [ERROR] could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/run/postgresql/.s.PGSQL.5432"?
log보면 이런 메세지들이 있네요
-------------------------------------------
DSM 6.1 사용 중인데
원인은 작업스케줄러에 시작시 bot start를 넣었더니 그런것 같습니다.
재시작해보니까 bot은 다시 시작되서 대답을 하는게 확인되었는데.. chk해보면 stop으로 나오네요..
링크에 게시글에 중간에 bot.sh.ori라고 되어있네요^^;;이것만 수정해주시면 그대로 따라해도 아무런 문제가 없겠네요
감사합니다!!
---------------------------------------------
지금 bot6.sh.ori로 변경해서 진행결과
작업스케줄러에 bot start 를 넣은거는 문제없이 running으로 표시되고 있습니다.
그런데 여전히 다운로드 완료 후 에러는 뜨네요 큰 문제는 아니니 그냥 써도 될것 같네요 감사합니다~!!!
-----------------------------------------------
마지막으로 다운로드 완료 후에 에러라고 뜨는건 다운로드 폴더를 mount 폴더로 지정해놨더니 그러네요
이거는 download station 문제로 생각되네요^^
덕분에 정말 편하게 사용할 수 있어서 감사합니다!!수고하세요~
IF (NEW.status = 2 AND NEW.total_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;
이 부분을 아래와 같이 수정 하셔서
적용 하시면
완료 일때에만 알람이 옵니다.
IF (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;
말씀하신대로 log를 확인하니 원인이 나오는듯 하네요. 감사합니다!!
[ERROR] File Move Exception, '[Errno 2] No such file or directory: 'Download Station Watch Directory Path (ex : /volmue1/download/watch/ )''
바쁘실텐데 죄송합니다.
위에 적어주신 대로 했는데도 여전히 완료 시점에 에러가 뜨는데, Download Station으로 들어가서 정지를 시키면 완료는 되는군요.
너무 막연한 질문인 것 같아 죄송합니다.
/var/log/xpebot.log 파일은 어떻게 보여 드려야 할까요?
좋은정보 감사합니다. 덕분에 알람 설정 잘하고 편하게 쓰고 있습니다 중간에 문제가 생겨서 댓글로 다량의 글을 남겼다가 해결하게 되어 지웠습니다...ㅎㅎ 아 한간지 궁금한게 있는데요 다운로드 스테이션 다른 사람도 추가 하려고 다른 사람의 텔레그램 chat id 을 알아내고 xpebot.cfg 파일에 chat_id 와 valid user? 여기에다가도 chat _id를 입력하였는데 다른사람이 알람이 오질 않네요.. 혹시 제가 빼먹은게 있을까요? 그냥 간단하게 chat_id 만 입력하면 끝인지도 궁금합니다.
마지막으로 완료되었을시 알람만 울리게 하는 댓글이 위에 써있는데 db 트리거는 어느 파일에서 수정 하는 것인가요?
답변 정말 감사합니다. 텔레그램은 계속 해결이 되지 않네요.. 2군데 모두다 입력 했는데.. restart 도 해보고 아예 멈췄다가 다시 켜보고 해도 알람이 오질않네요.. 제꺼는 잘오는데 상대방 께 안오네요..chat_id 좀 다시 확인해보고 해야 할것 같습니다. 상대방은 가만히 있어도 그냥 자동으로 대화창이 열리는 시스템인거 맞지요?
안녕하세요 써주신 방법대로 시험 메세지를 보내본 결과 상대방이 수신합니다. 그런데 다운로드 스테이션만 계속해서 수신이 되지않네요. 일단 xpebot.cfg 에 써있는 글을 복사하자면
[TELEGRAM]
# Download Station 에서 작업 완료시 알림 메시지를 받을 사용자의 Chat ID 목록(, 로 구분하여 여러명 등록, EX: NOTY_CHAT_ID = 12345,98765)
NOTY_CHAT_ID = 현재수신되는챗아이디, 상대방 챗아이디
# Telegrem BOT을 이용하려는 DSM 사용자 ID
DSM_ID = admin 계정
# Telegram BOT 의 Token ID
BOT_TOKEN = admin 계정의 봇토큰
# 등록된 사용자 목록(, 로 구분하여 여러명 등록)
VALID_USER = 현재수신되는챗아이디, 상대방 챗아이디
systemctl로 telegram service를 실행할 경우 telegram 봇은 인증부터 들어갑니다. 왜냐하면 systemctl이 찾고 있는 ~/.telegram-cli/는 저희가 위차가 /home/pi가 아닌 /root/.telegram-cli를 주목하고 있습니다. 그렇게 되면 telegram-cli.log는 사용자에게 [인증된 파일이 없습니다!]를 요청하게 되는거죠. 권한을 조금씩 수정하면 되긴 하지만 저 같은 경우에는 ~/tg 디렉토리와 ~/.telegram-cli 디렉토리를 /root 밑에 두고 tg.sh의 변수에서 설정한 경로와 telegram.service의 절대경로를 변경하여 해결하였습니다! 저보다 더 좋은 해결 방법을 알고 계시다면 댓글을 써주세요!
문제는 systemctl --user enable telegram.service 명령어가 여전히 먹히지 않습니다.
LXTerminal 에서 sudo systemctl --user enable telegram.service 를 입력시 이번에는
Failed to get D-Bus connection: 연결이 거부됨 이라고 합니다.
일반 Terminal 에서 systemctl --user enable telegram.service 를 실행해보니 뭔가 telegram.service가 실행되었다고는 합니다.
문제는, systemctl -- user start telegram.service 입력시 에러가 납니다.
에러 내용은 :
Job for telegram.service failed. See 'systemctl status telegram.service' and 'journalctl -xn' for details. 라고 하며
systemctl --user enable telegram.service 입력시
Loaded : loaded
Active : failed (Result : exit-code)
Process : 1647 ExecStart =/root/tg/tg.sh start( code =excited, status=203/EXEC)
라고 합니다.
telegram.service 를 라즈베리파이에 기본 설치되어있는 Text Editor로 만들었는데, 혹시 nano 에디터로 파일을 생성해야하는가요?
아니면 chmod 로 실행권한을 줘야하나요?
systemctl --user start telegram.service 실행시
Job for telegram.service failed. See 'systemctl status telegram.service' and 'journalctl -xn' for details. 이렇게 뜨고
앞에 sudo를 넣고 실행시에는
Failed to get D-Bus connection: 연결이 거부됨
연결이 거부됫다고 뜨네여
위와 같이 해도 안되어서 raspberrypi.org에서 해답을 찾았습니다.
파이가 너무 빨라져서 생기는 문제인것 같습니다. ^^;
/etc/rc.local 파일에 아래 두 줄을 삽입해서 해결했습니다.
sleep 15
su - pi -c "/home/pi/tg/tg.sh start"