첫 번째 CRON 작업을 작성하고 Nodejs로 제품 할인 모니터링

일부 서비스는 인터넷상에서 특정 제품의 가격을 감시할 수 있다.그런데 이런 모니터링 도구를 직접 작성할 수 있다는 거 알아요?
이 용례는cron 작업에 매우 적합하다.cron 작업은 특정 시간에 코드를 배정하여 실행한다(예를 들어 매일 한 번, 5분마다 한 번, 등).Cron 작업은 일반적으로 시스템 관리자가 그들의 서버 등을 백업하는 데 사용하지만, 다른 (재미있는) 일에도 사용할 수 있다.

🗂️ 1. crontab 명령


cronjobs를 사용하기 시작하려면 유일하게 유틸리티crontab가 필요합니다.
이것은cron*table*라고 명명되었습니다. 이것은cron*table*를 가리키기 때문에 이것은 설정 파일 (table이라고도 함) 입니다.crontab 유틸리티에 대한 자세한 내용을 보려면 터미널에서 man crontab를 입력합니다.
두 가지 중요한 명령을 기억해야 한다.
crontab -l 이것은 현재cron표의 내용, 즉 모든 계획된cron 작업을 보여 줍니다.(cron 작업을 초기화한 적이 없으면 "crontab: no crontab for {user}"를 표시합니다)
crontab -ecron표를 편집할 수 있습니다. 이것은cron작업을 추가하고 삭제하는 것을 의미합니다!(crontab을 시작하지 않았다면 "crontab: no crontab for {user} - 빈 crontab 사용하기"라고 말할 것입니다.
텍스트 편집기 주석 정보
명령crontab -e은 텍스트 편집기를 사용하여crontab 파일을 열려고 시도합니다.이전에 설정한 적이 없다면 기본값은vim입니다. 좋습니다.비교해 보면, 나는 vscode를 사용할 때 어려움을 만났다.
알림: 기본 편집기가vim이 아니지만, 이 경우 bashprofile의 기본 편집기 설정을 변경하지 않고 한 번만 사용하려면 터미널에 export EDITOR=vi 를 입력하십시오. 터미널 세션이 끝날 때까지 기본 편집기를vim로 설정하십시오. (예: 터미널을 닫을 때까지)
문제.crontab -e 왜/tmp에서 임시 파일을 만듭니까?이것은 정상적인 행위다.이것들은crontab을 직접 편집하지 않고 임시 파일을 작성한 다음 진짜crontab로 복사합니다.

🤡 2. 당신의 첫 직장(어리석은) 크론 일을 쓰세요


우선 바보 같은 짓을 하자.컴퓨터가 분당 단어를 크게 말할 수 있도록cron 작업을 만듭니다.친구나 룸메이트를 화나게 하는 것은 매우 유용하다.
먼저 crontab 명령을 사용하여 crontab을 엽니다.crontab -e그런 다음 파일에 다음 행을 추가하고 파일을 저장합니다.* * * * * say Hello이것은 당신의 첫 번째 크론 작업을 즉시 시작합니다!
그러나 이것은 무엇을 의미하는가?여기의 별표는 시간 지령(5개의 별 사이에'분당'을 빈칸으로 표시), 그 다음은 실제 셸 명령say Hello)으로 지정된 리듬에 따라 실행됩니다.
왜 *****는 매 분을 의미합니까?왜냐하면 이것은crontab의 신기한 지령 문법이기 때문이다!별의 뜻은'하나하나'라는 뜻으로 정규 표현식과 같다.

매일 자정이나 8월에 15분마다 보는 문법과 상황을 어떻게 표현하는지에 대한 지식을 더 알고 싶다면.
좋아, 이건 어리석은 테스트일 뿐이니 삭제합시다!파일crontab -e을 편집하여 행을 삭제할 수 있습니다.전체crontab (사용 crontab -r 를 제거합니다.

⛓️ 3. 다른 파일에서 코드를 실행하는cron 작업을 작성합니다


우리는 코드를 파일에 기록하고crontab에서 이 파일을 실행할 수 있으며,crontab 자체에 우리가 실행하고자 하는 실제 코드를 입력하는 것이 아니라.이 파일은 셸, Node, Python 등 원하는 프로그래밍 언어로 작성할 수 있습니다.
예제 1(셸)* * * * . path/to/my-shell-script.sh셸 스크립트가 실행됩니다.파일 경로 앞의 단점은 다음 스크립트를 실행하는 것을 표시합니다.
예 2(노드)* * * * path/to/your/node/binary path/to/my-node-script.js노드 스크립트가 실행됩니다.
주의 예시 2: node path/to/my-node-script.js만 입력할 수 없고 노드 바이너리 파일의 전체 경로를 삽입해야 합니다.왜?노드는 대개 node만 입력하면 실행할 수 있습니다. 이것은 설정했기 때문입니다PATH.Cron 작업은 예상한 대로 이 경로를 읽지 않습니다. 이것이 바로 node나 npm이 무엇인지 모르는 이유입니다.
콘솔에 which node를 입력하면 노드 바이너리 파일의 경로를 얻을 수 있습니다.만약 기계에 node가 전혀 설치되어 있지 않다면, 먼저 설치해야 합니다. (가장 좋은 것은 nvm를 통과하는 것입니다.)그러나 이것은 결코 크론 작업을 작성하는 요구가 아니라는 것을 주의하십시오.너는 어떤 다른 언어를 선택할 수 있다.

🕵️‍♀️ 4. 검색 할인(노드) 스크립트 작성


이제 이 모든 것의 진정한 핵심인 사이트를 분석해 어떤 제품에 대한 상세한 정보를 얻자.이 부분은 어느 정도 당신이 분석하고 있는 사이트에 달려 있다.다음은 제 방식입니다.
(1) 우선, 웹 사이트에서 어떤 기술을 사용했는지'Wappalyzer'라는 브라우저 플러그인으로 검사합니다. 이것은 웹 사이트의 작업 원리에 대한 힌트를 줍니다. 이것은 Rest API를 사용하는 단일 페이지 프로그램입니까, 아니면 서버에서 보여주는 프로그램입니까? 이것은 모든 알려진 API를 사용합니까?
(2) 그리고 저는 브라우저 개발 도구의'네트워크'옵션을 검사하여'XHR'요청을 필터하고 JSON 응답을 신속하게 검색합니다. 제가 보기에 Rest API와 비슷한 내용이 있습니까? 데이터에 저와 관련된 관건적인 이름이 있습니까? 예를 들어 제품 이름, 가격 등이 있습니까?
(3) 만약 그렇다면 우리는 매우 운이 좋다!이 JSON 출력을 하나의 (노드) 스크립트로 해석할 수 있습니다. 이 스크립트를 구축할 것입니다.
주의: 관련 데이터를 포함하는 JSON 응답이 없으면 이 사이트는 서버에서 나타날 수 있습니다.이것은 HTML을 분석해서 더 많은 작업을 하고 관련 CSS 클래스와 ID를 찾아서 데이터를 가져와야 한다는 것을 의미한다.나는 Node에서 이 임무를 완성하는 것을 더욱 좋아한다. 왜냐하면 그것은 순수한Javascript이고 DOM API를 자체로 가지고 있기 때문이다.Python으로 스크립트를 작성하려면 Beauty Soup이라는 라이브러리를 사용해야 합니다.
우리의 작은 스크립트는 정말 식은 죽 먹기다.http 요청을 더욱 쉽게 하기 위해 node-fetch라는 라이브러리가 필요합니다.
따라서 새로운 노드 프로젝트를 만듭니다yarn init그런 다음 라이브러리 설치yarn add node-fetch이제 작은 노드 스크립트를 작성합시다.내용은 당신의 용례, 사이트 등에 달려 있음을 주의하십시오. 당신은 반드시 스스로 작성해야 합니다!;-)
const fetch = require("node-fetch");
const URL ="url-for-your-product-from-the-rest-api";
const MAX_PRICE = 999;

fetch(URL)
  .then((response) => response.json())
  .then((data) => {
    const item = data.result[0];
    if (item.price < MAX_PRICE) {
      const message = `PRICE ALARM :-) ${item.price}${item.currency}`;
      sendNotification(message);
    }
  });

function sendNotification(message) {
  /* Because this is a cron job this plain console.log is enough to send an email to me... */
  console.log(message);
}

📬 5. 크론의 업무 보고를


우리의 작은 스크립트에서 함수 sendNotification 는 사실상 간단한 console.log 만을 실행하는 것임을 주의하십시오.
그러나 만약 하나console.log가 하나의cron 작업으로 실행된다면 그것은 최종적으로 어디로 향할 것인가를 스스로에게 물어본다.모든cron 작업은 비 인터랙티브 셸에서 실행되며 터미널 화면이 추가되지 않았습니다!
대부분의 경우,cron은 출력을 전자메일로 crontab 작업 원본의 사용자에게 보내지만, 전제는 '메일 수호 프로그램' (예:sendmail, qmail,postfix) 을 설정한 것입니다. 그렇지 않으면, 출력은 컴퓨터에만 나타나고, 어디에 있는지 아는 사람이 없습니다.: D.
내 예에서, 나는 이 메일러 deamon을 설치했는데, 이 메일들은 최종적으로 /var/mail 다음 파일에 저장되었다.이런 서류가 있는지 확인해 봐.만약 이러한 경우, 메일러 수호 프로세스가 작동할 수 있고, 수신자를 실제 이메일 주소로 쉽게 설정할 수 있습니다. 예를 들어 Gmail 주소는 다음과 같습니다.
crontab 파일의 맨 위에 쓰기:MAILTO="[email protected]"그리고 크론잡에서 실행된 후 Gmail 스팸메일 폴더를 확인하십시오. (필요하면 크론잡 시간을 분당 테스트로 변경합니다.)그리고 '스팸메일이 아닌 것으로 보고' 를 누르면 일반적인 수신함에 들어갑니다.
그래, 제품 세일할 때 지금 이메일 한 통 받을 거야!!

😴 6. 그런데 잠깐, 내가 노트북을 끄면 무슨 일이 일어날까?


질문:cronjob을 실행할 수 있습니까?
대답:아니야!컴퓨터가 잠든 상태일 때 Cron은 실행하지 않습니다.
그러나 너는 작은 기교를 하나 만들 수 있다. 너는 너의 컴퓨터를 너의 크론 작업이 안배되기 5분 전에 깨어나게 할 수 있다.
Mac 컴퓨터에서, 당신은 첫 번째 옵션 > 에너지 절약 > 시간표를 통해 이 점을 실현할 수 있습니다.
크론 조빈 즐거움!
신용: 제목 사진 작성자David Vega CC by 2.0

좋은 웹페이지 즐겨찾기