[야매코딩] 누구나 만들어보는 스팀봇! - (6) nohup으로 자동화, 알아서 언제나 24/7
0. 프린이 여러분, 수고했어요. 마지막입니다.
코딩 1도 몰라도 일단 따라하면 되는, '누구나' 하는 야매코딩 시리즈입니다.
누구나 만들어보는 스팀봇! 강좌 마지막 편에 오신 것을 환영합니다.
저번 편에서 꽤 많은 내용을 다뤘습니다.
스팀 블록체인에서 받아오는 permlink 개념을 알아봤고, .export()
를 이용해 포스트의 정보를 읽어보기도 했습니다. 에러를 해결하기 위해 노드도 변경하고 while문과 try/except문을 조합하기도 했죠.
뿐만 아니라 특정문구가 언급됐는지 실시간으로 체크가 가능해졌고, 포스팅 키를 넣어 대댓글도 달 수 있게 되었습니다.
즉 기본적인 기능을 갖춘 스팀봇이 드디어 완성됐었죠!
하지만 아직 원하는 문구를 인식하고, 실시간으로 지정된 문장으로 대댓글을 다는 정도입니다. 더 강려크한 기능을 갖췄으면 좋을텐데 말이죠! 그래서 추가 편성으로 심화편에서 보다 다양한 기능들을 3~4개 정도 소개하겠습니다.
자 이번 편에서는 VM인스턴스 화면을 닫아도 프린이만의 스팀봇이 24/7 작동하도록 하는 방법을 배워볼게요 :)
A. 개발 환경설정 따라하기 I - Google Cloud 세팅
B. 개발 환경설정 따라하기 II - Conda 세팅
C. 스팀 API 설치 및 살펴보기 101
D. 스팀 API 심화, 블록체인 & 포스트
E. 예제로 따라하는 스팀봇 뚝딱
F. nohup으로 자동화, 알아서 언제나 24/7 ☜
그럼 본격적으로 시작해볼까요?
- 난이도: 中
- 소요시간: 약 10분
이미지 출처 - https://dribbble.com/shots/3974885-Bumblebee by Pat Grivet
1. 한 가지 팁을 드릴게요.
여기까지 함께한 프린이라면 이제 강좌를 위한 준비 단계는 거뜬히 혼자 할 수 있다고 믿어요. VM인스턴스(부엌) 접속하고 조리기구 세팅까지 해주세요.
- 구글 클라우드 콘솔 사이트로 이동하고,
- Compute Engine 항목을 클릭하여,
- VM인스턴스의 SSH 버튼을 눌러 접속해주세요.
- 그리고
source activate steembot
을 입력해주세요. (조리기구 세팅)
자 준비됐나요?
응? 어디서 읽어본듯한 데자뷰...라고요? 아닙니다!!
저번가지 완성했던 레시피(코드) 부터 다시 볼까요?
from steem.blockchain import Blockchain
from steem.post import Post
from steem import Steem
s = Steem(nodes=["https://rpc.buildteam.io"], keys=["Key Goes Here!"])
b = Blockchain(s)
while True:
try:
stream = map(Post, b.stream(filter_by=['comment']))
for post in stream:
if "@야매코딩" in post.export()['body']:
print(post.export()['body'])
post.reply("Hi there!","","hellocrypto")
except:
print("뀨")
그러고 보니 위에 레시피(코드)에서 한 가지 문제점이 있었죠?
분명 stream = map(Post, b.stream(filter_by=['comment']))
에서 filter_by=['comment']
의 역할이 실시간으로 읽어오는 블록체인 정보중에서 댓글만 필터해야 하는데, 포스트랑 댓글 둘 다 인식하고 있죠.
아무래도 댓글만 인식했으면 좋겠으니, 이걸 간단히 고쳐볼까요?
사실 저번 편에서 언급했어야 하는 내용인데 잊고 말았습니다 (데헷) 친절히 지적해주신 마아냐 @maanya님 감사합니다 :)
딱 한 줄만 추가하면 됩니다 :) if post.is_comment():
if "@야매코딩" in post.export()['body']:
if post.is_comment():
print(post.export()['body'])
post.reply("Hi there!","","hellocrypto")
그럼 이제 레시피(코드) 로직이,
- 블록체인에서 실시간으로 정보 받아오다가
- "@야매코딩"이 들어가 있고
- 해당 정보가 포스트가 아닌 댓글이라면
- 해당 내용을 인쇄해주고, 댓글을 단다!
가 되겠네요. 포스트라면 무시를 하겠죠 이제.
그리고 if문 끝에 (:) 콜론이 있으니 기존 코드 두 줄은 한 번 탭을 해서 안으로 밀어주는거 잊지 말고요! 파이썬은 띄어쓰기에 민감합니다.
(한 번 더 탭!)print(post.export()['body'])
(한 번 더 탭!)post.reply("Hi there!","","hellocrypto")
만약 반대로 댓글이 아닌 포스트만 인식하고 싶다면
if post.is_main_post():
를 사용하시면 됩니다.
2. 영.원.히. 일해라 스팀봇!
지금까지 스팀봇을 작동시키려면 python3 blockpost.py
를 이용하고 있었죠?
하지만 이제 잘 알다시피 VM인스턴스 검은화면을 닫으면 종료되어 버린다는 단점을 갖고 있습니다. 스팀봇을 24/7 작동해야 의미가 있는데 말이죠.
그래서 해결책으로 리눅스의 nohup이라는 명령어를 사용해볼까 해요.
nohup python3 blockpost.py &
본래의 python3 blockpost.py
앞에 nohup
그리고 뒤에는 &
가 추가됐죠?
VM인스턴스를 SSH키를 이용해 접속하면 검은화면이 떴었는데, 이를 닫는다는 것은 접속, 즉 연결을 끊다는 뜻이죠. 그래서 기존 실행되던 스팀봇도 멈췄고요.
그런데 nohup
은 '연결이 끊겨도 상관없이~'라는 뜻을 가져요.
그리고 &
는 백그라운드에서 실행시켜! 라는 뜻을 가지죠.
백그라운드(background)에서 실행시키는게 무슨 차이가 있냐고요?
python3 blockpost.py
를 실행하면 검은화면에서는 스팀봇이 돌아가면서 나오는 결과들만 계속 나왔죠. 다른 일을 할 수가 없었어요! 그런데 백그라운드로 보내면 뒷쪽에서 해당 일이 진행되고, 그동안 프린이 또 다른 작업을 할 수 있죠.
nohup python3 blockpost.py &
을 입력하고 엔터를 누르셨나요? 그럼 아래와 같은 결과가 나와요.
리눅스에서 자동으로 해당 일(프로세스)에 번호를 매깁니다. 저 같은 경우에는 9886이라고 지정됐네요.
그리고 두 번째 사진을 보면 해당 결과는 nohup.out이라는 파일에 저장된다고 나옵니다.
결과가 파일에 저장되야 하는 이유요? 이제는 백그라운드에서 스팀봇이 돌아가니까, 에러 메세지나 성공했을 때 출력하던 댓글의 내용 등을 바로바로 검은 화면에서 못 보잖아요.
그래서 해당 내용을 파일에 저장해두면, 언제든 다시 돌아와서 확인할 수 있죠. 다른 말로는 로그(log)를 남긴다고 하죠.
이제 뒷쪽에서 잘 돌아가고 있는지 아닌지, 알 수가 없으니 확인해봐야겠죠?
ps
라는 명령어를 쓰면 됩니다. 입력 후 엔터를 눌러주세요 그럼 아래와 같은 결과가 보입니다 :)
중간에 python3가 보이죠? 번호는 9886이네요.
아까 nohup으로 실행시킬 때 보였던 번호죠.
다행히 잘 실행되고 있네요 :)
이번에는 ls
명령어로 저장된 파일들 목록을 살펴볼까요?
이제 nohup.out이 추가됐네요! 이제 언제든지 cat nohup.out
으로 안의 내용을 조회해볼 수 있습니다.
마지막으로 백그라운드에서 돌아가는 스팀봇을 중지시키고 싶을 때 방법을 알려드리겠습니다.
여러 방법들이 있겠지만, 저는 개인적으로 kill
이라는 살벌한 명령어를 사용합니다.
아까 프로세스 번호를 뒤에 입력하면 되죠.
짜잔! terminated 즉 종료됐다고 나옵니다.
이제 방법을 잘 아시겠죠? nohup을 이용하시면 바로 검은화면을 닫아 VM인스턴스 접속을 끊어도 스팀봇은 열심히 24/7 일하고 있을겁니다.
3. 마무리.
길면 길고, 짧다면 짧은 야매코딩 여정이었습니다.
A. 개발 환경설정 따라하기 I - Google Cloud 세팅
B. 개발 환경설정 따라하기 II - Conda 세팅
C. 스팀 API 설치 및 살펴보기 101
D. 스팀 API 심화, 블록체인 & 포스트
E. 예제로 따라하는 스팀봇 뚝딱
F. nohup으로 자동화, 알아서 언제나 24/7 ☜
많은 프린이 여러분(그리고 뜻밖의 굇수분들)이 함께 해주셔서 힘이 났습니다. 덕분에 여기까지 약 9일만에 달려왔네요 :)
아무것도 몰랐던 프린이라도, 일단 기본적인 형태의 스팀봇을 직접 만들어 보는 경험을 함께 하고 싶었습니다. 꼭 코딩을 잘해야 누릴 수 있는게 아니라고 보여주고 싶었죠.
그 의지가 잘 전달됐을지 궁금하네요 하핳.
여기까지 야매코딩 시리즈의 '누구나 만들어보는 스팀봇!' 편이었습니다.
조금 충전의 시간을 가지고, 새로운 야매코딩 강좌로 찾아뵙겠습니다!
이만 상병 크립토 @hellocrypto였습니다. 필승!
강좌 잘 배웠습니다. !!!!
한가지 질문 있습니다.
조건 만족시 송금을 하고 싶습니다.
s.commit.transfer('hellocrypto', 1, 'SBD', 'hi', 'dailypro')
송금이 나가질 않습니다 .. 어찌해야 할까요????
송금은 액티브키를 사용하셔야합니다.
s.commit.transfer('hellocrypto', 1, 'SBD', 'hi', 'dailypro') 이부분이 맞나요?
![2.jpeg](https://steemitimages.com/DQmU3id7WKxfiFgfRNZJWrgD9hsXPmC7Mnkpj9Juv1SVKPs/2.jpeg)
송금이 안나갑니다. ㅠㅠ
액티브키 사용했습니다.
gif 오픈소스 보다가 보니 아래 문장을 넣던데요 / 혹시나 넣었으나
from account import Account
위 문장을 넣으면 모듈이 없다고 작동을 안하던데요.. 혹시 이게 문제인가요?
account
는from steem.account import Account
라고 쓰셔야해요 ;ㅂ;아래의 코드가 정상 작동하는 것을 확인하였습니다.
parameter의 name 없이 입력하셨던게 문제가 된게 아닌가 싶습니다.
속이다 후련합니다. 감사합니다.![4.jpeg](https://steemitimages.com/640x0/https://steemitimages.com/DQmP7UBXvPa2myC4X9Ybr7Kg3fC5WZtAJWUWYohmyWiLMs9/4.jpeg)
하고자 했던걸 완료했습니다. 진짜로 감사드립니다.
다행입니다 :D ㅎㅎㅎ 크립토님의 포스트인데 제가 대신 대답드려서 질투하실지도 모르겠군요 (...)
밤 사이에 잘 해결됐군요..! 질투라니 오히려 감사합니다 :)ㅋㅋ 일일 조교님(?) 감사 보팅이라도 여기 (주섬주섬)
와! 시급! /행복
풀봇ㅋㅋ 좋아요 핸폰으로 되요? 노트북으로 되요?
중고컴이라도 사야하나요?
아무래도 원격접속으로 하는 코딩이다보니, 성능은 상관없지만 컴퓨터(노트북) 환경이 따라하기 편할것 같네요 :)
딱 기초과정 마스터 해냈네요!
기념삼아 테스트 해보겠습니다.
@야매코딩
Hi there!
Hi there!
오오 퍼펙트! 야매봇 제작 성공 축하드려요ㅎㅎ
감싸합니다 싸부! 이제 새로운걸 배우러 돌아오기 전까진 하산해서 혼자서 수련해야겠네요!
좋은 강좌 하고 계시네요~~ 개발자들이 이런거 쓰는거 상당히 귀찮아하는데
대단하십니다!! 근데 언제 상병 크립토가 되신거죠? ㅎㅎ 축하드립니다~
몸 건강하세요!!
저는 야매개발자라 이런 글쓰는게 오히려 재밌나봅니다ㅎㅎ :) 상병 단지 몇 일 안 됐습니다 하핳 감사합니다 초이님!
주말 동안에 게을러서 숙제를 못따라 갔네요 ㅠㅠ 좋은 포스팅 연재하시느라 고생 많으셨어요! 푹 충전하시고 얼른 돌아오시기를 기다리고 있겠습니다아 :)
넵 금방 돌아올거니 그동안 한 번 스팀봇 완성까지 도전해보세요ㅎㅎ 덕분에 힘이 납니다!! 감사합니다아 :)
오! 저 문장으로 해결하셨군요.
전 포스트랑 댓글을 구분한다면 포스트는 title정보가 들어 있고 댓글을 title 정보가 없으니깐 title이 비였는지를 if문으로 필터링하면 되지 않을까 생각만 했었네요.
title로도 포스트랑 댓글을 구분할 수 있을 것 같아요. ^^
오 그러네요 :) 댓글은 따로 title이 없으니 이런 방법도 있네요! 주사위 봇 처럼 대량(?)의 호출이 있는 경우에 특히 유용하겠네요 매번 댓글 체크용 API 호출할 필요 없으니
어디 강의에 써도 될 정도로 인 것 같습니다!ㅎ
핳핳 감사합니다 COSINT님 :) (으쓱으쓱)
야매코딩 시리즈라~ 1편 부터 봐야겠는데요? 정말 저같은 쌩초보도 할 수 있단 말입니꽈~~ 설렘 설렘..
그렇습니돠! 막히는 부분 있으면 @hellocrypto 소환하는 댓글 남겨주세요! :)
저는 잘몰라서 ㅎㅎㅎ 크립토님 즐거운 주말저녁되세요^^
우부님도 좋은 주말 되세요 :)
이런 식으로 24시간동안 컴퓨터를 꺼도 실행되는 간단한 프로그램을 만들 수 있군요. 윈도우 업데이트가 테러할 염려없이! ㅎㅎㅎ 잘 배우고 갑니다 :)
윈도우 업데이트 때문에 멈추면 ㅂㄷㅂㄷ하죠 :) 넵 굇수 마아냐님께 조금이나마 팁이 됐다면 좋겠네요ㅎㅎ
Why don't you post in English have seen some of your English comments they are nice or do you know any suitable translator I could use to interact with you on steemit
Hi there. I will be posting in English as well soon. It's just that my starting point was with KR community. Thanks for your compliments :)
Wow thanks am happy I feel i will learn a lot from you, already added you to my ginabot notifications so I will be alerted anytime you post.
I will be waiting, Good night from my side