[node.js 스팀봇 강좌] #12. 비정상 종료 프로그램 재실행시키기

in #kr7 years ago (edited)

지난 연재

[node.js 스팀봇 강좌] #1. steem.js 라이브러리 이용하기
[node.js 스팀봇 강좌] #2. steem.js를 이용해서 보팅해보기
[node.js 스팀봇 강좌] #3. steem.js를 이용해서 포스팅 올리기
[node.js 스팀봇 강좌] #4. 인증키 등의 정보를 외부 파일에 저장하기
[node.js 스팀봇 강좌] #5. steem.js를 이용하여 댓글 달기
[node.js 스팀봇 강좌] #6. steem.js를 이용하여 송금하기
[node.js 스팀봇 강좌] #7. steem.js를 이용하여 포스팅 조회하기
[node.js 스팀봇 강좌] #8. 포스팅 조회 결과에서 필요한 정보 추출하기
[node.js 스팀봇 강좌] #9. steem.js를 이용하여 팔로우 맺기
[node.js 스팀봇 강좌] #10. steem.js를 이용하여 스팀잇 모니터링하기3
[node.js 스팀봇 강좌] #11. 항상 실행되는 프로그램 만들기


실행중인 봇 프로그램은 네트워크 오류나 기타 런타임 오류 등 다양한 원인으로 인해 비정상적으로 종료될 수 있습니다.

개발과정에서 로직상의 오류는 개발과정에서 보완할 수 있고, 실행중에 발생하는 런타임 오류에 대해서 try - catch 기법 등을 이용하여 스마트폰으로 메세지를 보내거나 프로그램을 재실행 시키는 등 어느정도 통제가 가능하기는 합니다.

하지만, steem.js나 DB접속 라이브러이와 같이 직접 개발하지 않은 코드에서 발생하는 오류에 대해서는 속수무책일 수밖에 없습니다.

물론 전문적인 개발자의 경우에는 위와 같은 프로그래밍 스킬을 이용하거나 라이브러리를 직접 손보면서 오류회피하거나 후처리를 개발을 할 수 있겠지만, 간단한 봇으로 포스팅의 편의를 도모하고자 하는 본 연재의 범위에서 이를 공부해서 해결하는 것은 주객전도일 수 있겠습니다. ^^

그래서 이번에도 역시 또 비교적 단순하지만 확실한 방법으로 프로그램을 항상 실행하는 방법에 대해 살펴보겠습니다.

전체적인 흐름은 다음과 같습니다.

  • 어떤 목적을 위한 봇을 개발하는 것까지는 이전 강좌와 동일합니다.

  • 다만 해당 프로그램에서 다음번 동작을 실행하기 위해 예약하는 과정을 생략하는 대신, 전혀 다른 프로그램이 봇 프로그램을 주기적으로 재 실행시키는 방법입니다.

  • 즉, setTimeout이나 setInterval을 사용하지 않고, 소위 순차 프로그램으로 봇을 개발합니다.

  • 그리고 node.js의 child_process.js 라이브러리를 이용하여 주기적으로 다른 프로그램을 실행시키는 프로그램을 만든 뒤, 이 프로그램으로 봇 프로그램을 주기적으로 실행시켜 줍니다.

이와 같은 흐름으로 프로그램을 실행시키게 될 경우, 한 번의 동작에서 오류가 발생하여 봇 프로그램이 비정상 종료가 되더라도 다음번 실행을 책임지는 프로그램이 별도로 동작하고 있기 때문에 '항상' 실행하는 목적을 달성할 수 있습니다.

child_process를 사용하는 방법 역시 다양하지만, 실행주기와 실행프로그램 이름을 입력받아 꾸준히 재실행시켜주는 프로그램을 다음과 같이 구현해 봤습니다.

이렇게 구현한 프로그램(test1.js)로 다른 프로그램(test2.js)를 5분에 한번씩 실행시키려면, 윈도우 커맨드창에서 다음과 같이 입력하면 됩니다.

c:\> node test1.js 300 test2.js

그럼 주어진 시간마다 test2.js프로그램이 실행된 결과가 커맨트창 화면에 누적되어 출력됩니다.

네트웍 환경이 불안정하거나 프로그램 수행 과정에서 런타임 오류가 발생할 가능성이 높은 경우에 예외처리보다는 마치 윈도우 껐다 켜는 것처럼 봇 프로그램을 다시 실행하는 간단한 방법으로 '항상' 실행을 유지하는 방법에 대해서 살펴보았습니다.

Sort:  

와 이런 시리즈를 연재하고 계셨었군요..
steem.js 문서화가 거의 안되어있어서 뭐 하나 찾아보려면 되게 오래걸렸는데, 이렇게 잘 정리해주시니 감사합니다 :)

스팀잇이 프로그래밍이나 통계를 공부하기 좋은 환경이라, 처음으로 javascript도 공부해가면서 취미로 연재하고 있습니다. 간단한 봇을 몇개 만들어뒀는데 지난 주말부터 자꾸 프로그램이 죽어서 어제 저녁에 만들었는데, 알고보니 공유기 수명이 다 되서 네트웍이 됐다안됐다 한거더라구요. ^^

좋은 포스팅 감사합니다^^
덕분에 프로그램 코딩? 시작해보는 좋은 계기가 되었습니다!
워낙 문외한 인지라.. 여기저기서 다른 자료도 검색해보고 열심히 공부중입니다! ㅎㅎ

시작하신 걸 축하드립니다. 기술이 발달하면서 점점 더 편리한 도구가 많이 나오지만, 반대로 사람들의 수준도 점점 높아지겠지요. ^^

제가 얼마나 잘 활용할 수 있을지는 모르겠지만, 그래도 하나하나 알아가는 과정이 재밌네요^^

뭔가 해보고 싶은데 어렵군요 ㄷㄷ 트위터처럼 봇관리하는 사이트는 안나올련지..ㅜㅜ

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.030
BTC 58476.88
ETH 2522.41
USDT 1.00
SBD 2.34