매분보다 크론 작업을 더 자주 실행할 수 있습니까? 명령없이 30

휴면 명령없이 30 초마다 크론 작업을 실행할 수 있습니까?



답변

작업을 자주 실행 해야하는 경우 cron이 잘못된 도구입니다. 단순히 작업을 자주 시작하지 않는다는 사실 외에도, 실행 간격보다 작업 실행 시간이 오래 걸리면 심각한 문제가 발생할 수 있습니다. 작업을 다시 작성하여 지속적으로 데몬 및 실행 한 다음 필요한 경우 cron에서 시작하십시오 (이미 실행중인 경우 다시 시작되지 않도록해야 함).


답변

가장 독창적 인 Linux 명령 오용 후보자 :

nohup watch -n 30 --precise yourprog >/dev/null &

yourprog다음으로 구성된 경우 :

date +%M.%S.%N >> yourprog.out

다음 yourprog.out과 같이 보일 수 있습니다 :

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

꽤 좋은 수준의 정밀도를 나타냅니다.

다음은 명령 부분에 대한 설명입니다.

  • nohup-이 watch경우 터미널을 종료 할 때 그 뒤에 오는 명령 이 종료되지 않습니다.
  • watch-이 프로그램은 명령을 반복적으로 실행합니다. 일반적으로 명령을 watch실행할 때 마다 명령의 첫 화면 출력이 표시됩니다 .
  • -n 30-명령을 실행하는 간격입니다. 이 경우에는 매 30 초입니다.
  • --precise-이 옵션이 없으면 간격 ( 초) 후에watch 명령 실행합니다 . 그것으로, 명령의 각 시작은 시작 간격 가능한 경우. 예제에서이 옵션을 지정하지 않으면 명령을 시작하고 실행하는 데 걸리는 시간 ()으로 인해 시간이 30 초 이상 늦게 나옵니다 . yourprog
  • yourprogwatch실행할 프로그램 또는 명령 줄 . 명령 행에 쉘에 특수 문자 (예 : 공백 또는 세미콜론)가 포함되어 있으면 인용해야합니다.
  • >/dev/null-보다 큼은 실행중인 명령의 출력을 watch파일로 리디렉션합니다 /dev/null. 이 파일은 기록 된 모든 데이터를 버립니다. 이렇게하면 출력이 화면에 기록되는 것을 막을 수 있으며, nohup사용 중이므로이라는 파일로 출력이 전송되는 것을 막을 수 nohup.out있습니다.
  • &watch명령이 백그라운드에서 실행되고 제어는 터미널 또는 상위 프로세스로 돌아갑니다.

그 주 nohup출력 리디렉션 및 &배경 제어 연산자에 한정되지 않는 watch.

다음은 예제 yourprog스크립트에 대한 설명입니다 .

  • date-현재 날짜 및 / 또는 시간을 출력합니다. 또한 설정할 수 있습니다.
  • +%M.%S.%Ndate사용할 출력 형식을 지정합니다 . %M현재 분, %S현재 초 및 %N현재 나노초입니다.
  • >> yourprog.outdate명령 의 출력 을이라는 파일로 리디렉션합니다 yourprog.out. 보다 큰 두 배는 출력이 이전 내용을 덮어 쓰지 않고 각 호출에서 파일에 추가되도록합니다.

편집 :

남용 될 수있는 (또는 합법적 인 사용) 또 다른 것은 시스템 타이머입니다.

Cron 교체Cron vs 시스템 타이머로 시스템 / 타이머를 참조하십시오 .

곧 예제를 게시하려고합니다.


답변

Cron은 매분마다 깨우도록 설계되었으므로 언급 한 것처럼 잠을 자지 않고 해킹 없이는 불가능합니다.


답변

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

이전 인스턴스가 이미 실행중인 경우 종료되도록 프로그램에 무언가를 작성하는 것을 잊지 마십시오.

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

물론, 이것은 여전히 ​​실패의 가능성이 매우 적으므로 Google을 검색하여 환경에 적합한 더 나은 솔루션을 찾으십시오.


답변

타사 소프트웨어를 사용하여이 작업을 수행 할 수 있습니다.

나를 위해 잘 작동 한 옵션은 자주 cron입니다

밀리 초 정밀도를 허용하며 현재 실행이 종료 될 때까지 다음 실행을 연기 할 수있는 옵션을 제공합니다.


답변

몇 가지 우려 사항이 있습니다.

(1) 때때로 시스템이 바빠서 정확히 30 초 지점에서 작업을 시작할 수없는 경우 한 작업을 실행하는 동시에 다른 작업이 팝업되고 동일한 작업을 수행하는 2 개 이상의 작업이있을 수 있습니다. 의회. 스크립트에 따라 여기에 약간의 간섭이있을 수 있습니다. 따라서 해당 스크립트의 코딩에는 특정 스크립팅의 한 인스턴스 만 동시에 실행되도록 일부 코드가 포함되어야합니다.

(2) 스크립트에 많은 오버 헤드가있을 수 있으며 원하는 것보다 많은 시스템 리소스를 소비합니다. 다른 시스템 활동과 경쟁하는 경우에도 마찬가지입니다.

따라서 하나의 포스터가 그것을 넣었 으므로이 경우 추가 프로세스로 실행되는 데몬을 넣는 것이 중요합니다.


답변

이 작업에 가장 간단하고 좋아하는 솔루션은 다음과 같습니다.

크론 항목 :
* * * * * flock -w0 /path/to/script /path/to/script

스크립트:
while true;do echo doing something; sleep 10s;done

게으른 대안 : 🙂

* * * * * flock -w0 /path/to/log watch -n 10 echo doing >> /path/to/log

또는

* * * * * flock -w0 /path/to/log watch -n 10 /path/to/script

찬성

  • flock명령을 사용 하면 동시에 여러 인스턴스에서 스크립트를 실행하지 않아도됩니다. 대부분의 경우 매우 중요 할 수 있습니다.
  • flockwatch명령은 대부분의 리눅스 설치 횟수로 볼 수 있습니다

단점

  • 이런 종류의 “서비스”를 중지하려면 2 단계가 필요합니다.
    • 크론 항목을 주석 처리
    • 스크립트 또는 watch명령을 종료