2015/07/15 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram BOT 만들기 1부 - Telegram cli 설치
2015/07/16 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram BOT 만들기 2부 - Telegram cli 기초 사용법
2015/07/16 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram BOT 만들기 3부 - Telegram cli BOT 의 뼈대 만들기
2015/07/21 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram BOT 만들기 4부 - Telegram CLI 데몬 실행 및 서비스 등록
2015/07/22 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram BOT 만들기 5부 - Telegram CLI BOT 최종
systemctl 로 telegram service 를 시작 하면 봇이 응답을 받지 않는 문제가 있네요...ㅠㅠ
해결 방법을 찾아 보고 있습니다.
혹여 잘 아시는 분은 댓글로 도움 부탁드립니다.
기존에 Telegram CLI 데몬을 등록하는 글을 작성한게 있는데 최근(?) Raspbian Wheez 에서 Raspbian Jessie 로 업데이트가 되면서
서비스를 관리하는 프로세스가 변경이 되었다. 리눅스의 커널이 올라가면서 init 프로세스에서 systemd 로 변경이 되었는데
사용법이 많이 달라져있다.
init 과 systemd 차이 또는 사용법은 구글링 해보면 많이 나오니 이 블로그에서는 Telegram CLI 를 어떻게 등록 하는지에 대해서만 포스팅 한다.
이 글의 라즈베리 파이 시작 프로그램 작성 방법은 Raspbian Jessie 버전에서 작동합니다.
기존에는 /etc/init.d/telegramd 라는 파일 이름으로 스크립트를 등록해서 사용 했었으나 이젠 해당 스크립트는 필요 없고 다음 순서대로 하면 된다.
1. telegram.service 파일 작성하기.
일단 Telegram CLI 를 pi 계정에서 사용하는 가정하에 다음과 같이 디렉토리를 생성한다.
[pi@/home/pi]$ cd /home/pi/.config/systemd/user
디렉토리를 생성 하고 해당 경로로 이동한다.
vi 또는 nano 에디터를 이용해서 다음 내용의 파일을 telegram.service 파일로 생성한다.
[Unit]
[Service]
[Install] |
빨간색 글씨로 표시된 부분은
2015/07/21 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram BOT 만들기 4부 - Telegram CLI 데몬 실행 및 서비스 등록
이 링크에서 4. Telegram CLI 서비스 등록하기
에서 설명한 셀 스크립트를 그대로 활용 하는 부분이므로 해당 링크 글을 참조 한다.
위 내용을 저장하면 telegram.service 라는 파일이
/home/pi/.config/systemd/user/telegram.service 경로에 저장 된다.
이제 systemd 에 등록할 차례 이다.
2. 서비스 등록 하기
3. 서비스 시작 하기
4. 서비스 상태 확인 하기
active(running) 이 되어 있는지 확인 한다.
pi 707 697 0 15:03 ? 00:00:00 /home/pi/tg/bin/telegram-cli -s /home/pi/tg/bot/basicbot.lua -L/var/log/telegram-cli.log -P 8080 -e contact_list -d
Loaded: loaded (/home/pi/.config/systemd/user/telegram.service; enabled)
Active: active (running) since Mon 2016-07-25 15:03:26 KST; 18min ago
Process: 702 ExecStart=/home/pi/tg/tg.sh start (code=exited, status=0/SUCCESS)
Main PID: 707 (telegram-cli)
pi 885 716 0 15:24 pts/0 00:00:00 grep --color=auto telegram
위 명령어를 이용해서 Telegram CLI 프로세스가 실행 되고 있는지도 확인한다.
모든 과정이 끝났다.
이젠 라즈베리파이를 재부팅 해보고 Telegram CLI 가 부팅시 시작 되는지 확인해 본다.
'강좌 > RaspberryPI 활용' 카테고리의 다른 글
Raspberry pi FFMpeg 설치 (2) | 2017.07.05 |
---|---|
Raspberry pi 와 Arduino Pro Mini - RF 433 통신하기 (4) | 2017.02.03 |
Raspberry pi touch screen 깨우기 (0) | 2017.01.25 |
Raspberry pi - Python 3.5 설치 하기 (12) | 2016.10.11 |
Telegram CLI 시작 프로그램 등록하기 (18) | 2016.07.25 |
라즈베리파이 FrameBuffer 스트리밍 (0) | 2016.01.13 |
Raspberry Pi Zero 출시 (0) | 2015.11.26 |
날씨 예보문 가져오기 (0) | 2015.10.21 |
라즈베리파이 공식 7인치 LCD (DSI) 멀티 터치 사용하기 (5) | 2015.09.23 |
-
seohyeon 2016.11.27 16:20
systemctl로 telegram service를 실행할 경우 telegram 봇은 인증부터 들어갑니다. 왜냐하면 systemctl이 찾고 있는 ~/.telegram-cli/는 저희가 위차가 /home/pi가 아닌 /root/.telegram-cli를 주목하고 있습니다. 그렇게 되면 telegram-cli.log는 사용자에게 [인증된 파일이 없습니다!]를 요청하게 되는거죠. 권한을 조금씩 수정하면 되긴 하지만 저 같은 경우에는 ~/tg 디렉토리와 ~/.telegram-cli 디렉토리를 /root 밑에 두고 tg.sh의 변수에서 설정한 경로와 telegram.service의 절대경로를 변경하여 해결하였습니다! 저보다 더 좋은 해결 방법을 알고 계시다면 댓글을 써주세요!
-
Acidpop acidpop 2016.12.05 09:20 신고
제가 systemctl 을 제대로 이해하지 못하고 사용을 해서 그랬었군요.
정말 좋은 정보 감사합니다.
-
-
bestbefore 2017.02.11 08:31
라즈베리파이 3 Jessie 사용중입니다.
자꾸 daemon 이 stopped 되어 작동을 안하는 문제가 있습니다.
해당 글에 댓글대로 , ~/tg 폴더와 ~/.telegram-cli 폴더를 전부 /root 폴더 아래에 복사시켰습니다.
tg.sh 같은 경우도
ExecStart=/root/tg/tg.sh start
ExecStop=/root/tg/tg.sh stop
로 경로를 변경시켰습니다.
telegram.service 역시
[Service]
Type=forking
ExecStart=/root/tg/tg.sh start
ExecStop=/root/tg/tg.sh stop
로 경로를 변경시켰습니다.
문제는 터미널에서 systemctl --user start telegram.service 를 실행시켰을때 에러가납니다
Active: failed (Result: exit-code)
Process: 1548 ExecStart= /root/tg/tg.sh start (code=exited, status=203/EXEC)
라고 합니다.
root 폴더가 일반적으로 접근허용이 안되있어서 그런가보다 하고 LXTerminal 에서 실행시켰는데 그래도 결국 실패했습니다;;
systemctl --user enable telegram.service 라는 명령을 내렸을 때,
Failed to get D-Bus connection: 명령을 허용하지 않음 이라고하네요
혹시 이런 문제들에 대한 해결방법이나 조언 부탁드립니다.-
Acidpop acidpop 2017.02.13 10:36 신고
systemctl 명령을 사용하실때
pi 계정에서 사용을 하셨나요?
맨 앞에 sudo 명령을 붙여서 실행해보세요
-
-
bestbefore 2017.02.14 05:13
따로 계정을 생성하거나 추가/변경 시킨것은 없습니다.
뭔가 꼬인거같아서 전부 지우고, 시작부터 /root 폴더에 전부 생성하였습니다.
daemon 은 Running 상태이며, 8888포트로 메시지도 전달이 가능합니다.
문제는 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 로 실행권한을 줘야하나요?-
Acidpop acidpop 2017.02.14 09:37 신고
글쎄요...
저도 systemctl 을 사용하고 있지 않아서
정확한 답변을 드리기가 어렵습니다. ㅠㅠ
-
-
-
xoskd 2017.04.10 13:37
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: 연결이 거부됨
연결이 거부됫다고 뜨네여
-
Acidpop acidpop 2017.04.10 13:53 신고
일단
/home/pi/.config/systemd/user/telegram.service
이 파일이 정확히 있는지 확인해주시고
이 파일 내용이
[Unit]
Description=Telegram CLI Daemon
[Service]
Type=forking
ExecStart=/home/pi/tg/tg.sh start
ExecStop=/home/pi/tg/tg.sh stop
[Install]
WantedBy=default.target
위와 같이 되어 있는지 확인 하신 다음
/home/pi/tg/tg.sh 파일이 있는지
그리고 tg.sh start 또는 stop 이 제대로 작동하는지 확인 해주세요
제 라즈베리파이에 설치된 버전은
4.4.38-v7+ #938
Raspbian GNU/Linux 8 (jessie)
버전입니다.
현재 제 시스템에서는
systemctl --user start telegram.service
위 명령 실행시 아무 메시지도 나오지 않고
정상적으로 실행이 되어 있습니다.
systemctl --user status
위 명령을 실행 하면 아래와 같이 나옵니다.
telegram.service
● telegram.service - Telegram CLI Daemon
Loaded: loaded (/home/pi/.config/systemd/user/telegram.service; disabled)
Active: active (running) since Mon 2017-04-10 13:45:41 KST; 5s ago
Process: 23150 ExecStart=/home/pi/tg/tg.sh start (code=exited, status=0/SUCCESS)
Main PID: 23156 (telegram-cli)
CGroup: /user.slice/user-1000.slice/user@1000.service/telegram.service
└─23156 /home/pi/tg/bin/telegram-cli -s /home/pi/tg/bot/acidpopbot.lua -L/var/log/telegram-cli.log -P 8888 -e contact_list -d
혹시 user 디렉토리를 본인 ID 로 만드신건 아니신지요
-
-
pi@raspberrypi:~ $ systemctl --user status telegram.service
● telegram.service - Telegram CLI Daemon
Loaded: loaded (/home/pi/.config/systemd/user/telegram.service; enabled)
Active: inactive (dead) since 월 2017-04-10 22:18:09 KST; 40s ago
Process: 8743 ExecStop=/home/pi/tg/tg.sh stop (code=exited, status=0/SUCCESS)
Process: 8738 ExecStart=/home/pi/tg/tg.sh start (code=exited, status=0/SUCCESS)
Warning: Unit file changed on disk, 'systemctl --user daemon-reload' recommended.
실행시 이렇게 뜹니다
파일다 제대로있고 경로도 같습니다
-
Acidpop acidpop 2017.04.10 23:39 신고
일단 systemctl 을 꼭 사용하셔야 할 이유가 있나요?
굳이 필요 없으시다면
/etc/rc.local
을 vim 등의 편집기를 이용해 수정해주세요
sudo vim /etc/rc.local
exit 0 바로 윗 라인에
su - pi -c "/home/pi/tg/tg.sh start"
이 명령을 추가해 주시면
부팅시 telegram-cli 가 실행 됩니다.
그리고 실행 상태 여부는
/home/pi/tg/tg.sh chk
이 명령으로 체크하세요
systemctl 쓰지 않으시는걸 추천드려요