매일 다른 매개 변수로 cronjob 실행


12

저는 프로그래머이며 크론에 대해 많이 알지 못하지만 이것이 가능한지 알고 싶습니다.

[option1, option2, option3]NodeJS에서 실행되는 배열 과 스크립트가 있다고 가정 해 보겠습니다 script.js. 매일 오전 1시에이 스크립트를 실행하고 싶습니다. 이것의 cron명령은 다음과 같습니다.

0 1 * * * node ~/script.js

이제 까다로운 부분은 매일 옵션을 교체하고 싶기 때문에 월요일 과 같이 실행하고 싶고 node ~/script.js option1다음 날 node ~/script.js option2등입니다. 또한 필요할 때 옵션을 추가 / 제거 할 수 있기를 원하지만 회전은 그대로 유지해야합니다.

어떤 식 으로든 가능합니까? 노드 에서도이 작업을 수행 할 수 있다는 것을 알고 있지만 스크립트 외부 에서이 작업을 수행하고 스크립트를 그대로 둡니다.


2
cron이 자체적으로 수행하도록 vs 스크립트를 작성하는 것이 좋습니다.
earthmeLon

답변:


15

또한 필요할 때 옵션을 추가 / 제거 할 수 있기를 원하지만 회전은 그대로 유지해야합니다.

까다 롭습니다. 옵션 목록을 수정 한 후에도 회전이 그대로 유지되는 것은 무엇을 의미합니까? 결국, 당신은 목록을 완전히 재구성하고, 당신이 어디에 있는지에 대한 단서를 파괴 할 수 있습니다.

당신이 할 수있는 일은 옵션을 나타내는 파일 (파일 이름 또는 내용을 통해)이있는 디렉토리를 설정하는 것입니다. 그런 다음 cron 작업이 실행될 때마다 해당 디렉토리를 나열하고 마지막 수정 시간별로 파일을 정렬합니다. 가장 오래된 항목 인 touch해당 파일을 수정 시간을 현재 시간으로 변경 한 다음이를 사용하여 스크립트를 실행하십시오.

#!/bin/bash
cd ~/script-options
next=$(ls -rt | head -n1)
touch -- "${next}"
node ~/script.js ${next} or $(<"${next}")

원하는 경우 cron을 위해 한 줄로 작성해도 읽을 수는 없습니다.

옵션을 추가한다는 것은 옵션 디렉토리에 새 파일을 추가하는 것을 의미합니다. 옵션을 제거한다는 것은 파일을 삭제하는 것을 의미합니다. 어느 시점에서 가장 오래된 파일이 다음에 실행될 파일이므로,주기가 끝날 때 마치 마치 실행 된 것처럼 새 옵션이 추가됩니다. 옵션을 다시 주문하려면 원하는 순서대로 터치하면됩니다.


"목록 편집"에서 옵션 순차를 관리하는 방법에 대해 +1하십시오.
Hagen von Eitzen

답변 주셔서 감사합니다, 나는 그것을 좋아하고 그것을 사용할 것입니다. 목록에 새 회전을 추가 할 때 회전 순서가 중요하지 않습니다. 중요한 것은 모두 같은 요일에 2 주가 아니라 매주 1-2 주에 한 번씩 달리는 것입니다.
Saif Bechan

2
$(ls -rt | head -n1)개행 문자를 포함하는 파일 이름은 물론 중단되지만이 목적을 위해 "하지 마십시오"만으로도 벗어날 수 있습니다.
CJM

20

요일마다 다른 옵션을 원한다고 가정 해 봅시다. 당신은 할 수 있습니다 :

  1. 다음에 대해 별도의 cron 작업을 수행하십시오.

    0 1 * * 0 node ~/script.js option1
    0 1 * * 1 node ~/script.js option2
    0 1 * * 2 node ~/script.js option3
    

    기타...

  2. bash당신을 위해 원하는 옵션을 제공합니다 :

    0 1 * * * node ~/script.js case `date +%u` in 0 ) echo option1 ;; 1 ) echo option2 ;; 2 ) echo option3 ;;  esac
    

    (나는 후자를 실행하지 않았으므로 약간의 조정이 필요할 수 있지만 이것이 일반적인 아이디어입니다.)


2
답변 주셔서 감사합니다,하지만 난장판 것 같아요. 실제로 어딘가에 배열을 정의해야합니다. 그렇지 않으면 작동하지 않습니다. echo option1옵션은 주마다 다를 수 있으므로 etc로 작업 할 수 없습니다 . 내 Node 앱 에서이 작업을 수행하고 DB에서 마지막으로 실행 한 것을 추적합니다.
Saif Bechan

13

아니, 나는 이것을 할 수있는 확실한 방법이 없다고 생각할 수 있습니다. 날짜를 확인하고 매일 필요한 옵션으로 노드 응용 프로그램을 시작하는 간단한 쉘 래퍼 스크립트를 작성하십시오.


+1 키는 '깨끗한 길'이 아닙니다.
Paolo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.