15 초마다 Cron 실행 작업


답변:


27

cron을 사용하면 1 분 단위로 아래로 갈 수 없습니다. 할 수있는 일은 매 분마다 작업을 실행하고 15 초 동안 기다렸다가 반복하는 스크립트를 실행하는 것입니다. 다음 crontab 줄은 some_job15 초마다 시작 됩니다.

* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job

이 스크립트는 작업이 15 초 이상 걸리지 않는다고 가정합니다. 다음의 약간 더 복잡한 스크립트는 다음 인스턴스를 실행하는 데 너무 오래 걸린 경우 다음 인스턴스를 실행하지 않도록합니다. 형식 date지원에 의존 %s합니다 (예 : GNU 또는 Busybox, Linux에서는 괜찮을 것입니다). crontab에 직접 입력하면 crontab 행 %과 같이 문자를 작성해야합니다 \%.

end=$(($(date +%s) + 45))
while true; do
  some_job &
  [ $(date +%s) -ge $end ] && break
  sleep 15
  wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job

그러나 15 초마다 자주 작업을 실행해야하는 경우 cron이 잘못된 접근 방법 일 수 있습니다. 단기 프로세스에서는 유니 세가 훌륭하지만 15 초마다 프로그램을 시작하는 오버 헤드는 무시할 수 있습니다 (프로그램 요구 방식에 따라 다름). 응용 프로그램을 항상 실행하고 15 초마다 작업을 실행할 수 없습니까?


i : 1 2 3 4 ; do some_job & sleep 15; done(마지막 수면은 다음 실행에 영향을 미치지 않습니다.) 내 변형)
Olivier Dulac


13

다른 방법과 다른 접근 방식 : 각각 4 초씩 4 개의 크론 작업을 실행하십시오.

* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job

자신을 방해하는 일을 방지하기 위해, 우리는 GNU를 통해 15초에 그것의 실행 시간을 제한 로 coreutils ' timeout각 작업. 그러나 15 초가 지나도 작업이 즉시 종료되지 않으면 여전히 문제가 발생할 수 있습니다. 문제가 발생한 경우이를 해결하는 방법에 대한 자세한 내용은 명령 설명서를 참조하십시오. 또한 명령이 15 초보다 오래 걸리고 시간 종료가 종료되면 0이 아닌 종료 상태가되어 cronjob-email을 트리거합니다.


반복적이지만 훌륭합니다.
Mike Kormendy

1
좋은. 프로세스가 오래 실행되면 다음 프로세스가 다른 코어에서도 종료 될 수 있습니다. 의도적으로 Cron 작업에 대한 핵심 선호도를 설정할 수 있는지 확실하지 않지만이 방법이 더 나아질 수 있습니다.
Tim

@Tim 좋은 지적. 나는 약간의 편집에서 그 문제를 해결했다.
Otheus

2

요컨대, cron은 시간에 따라 세분화되지 않습니다. 가장 짧은 기간은 1 분입니다.

#       .---------------- minute (0 - 59)
#       |       .------------- hour (0 - 23)
#       |       |       .---------- day of month (1 - 31)
#       |       |       |       .------- month (1 - 12) OR jan,feb,mar,apr ...
#       |       |       |       |       .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#       |       |       |       |       |
#       *       *       *       *       *       command to be executed
        *       *       *       *       /usr/bin/chromium-browser

그러나 15 초마다 실행되는 스크립트를 작성할 수 있습니다 ...


* * * * * /usr/bin/chromium-browsercrontab에 줄 이 있습니다. 매뉴얼에 따르면 매 분마다 실행되지만 아무것도 실행되지 않습니다.
xralf

그러한 스크립트를 작성하는 것이 어렵습니까? 다른 질문을해야합니까 아니면 여기에 쓸 수 있습니까?
xralf

Cron 작업에는 터미널이 없으므로 브라우저가 실패 할 것으로 예상됩니다. 조용히 그렇게 할 수 있습니다.
BillThor

내 cron 로그는 / hat / log / cron에 위치하여 redhat 파생물입니다. 페도라, 센 토스 등. 또한 사람들이 무슨 일을하는지 정확하게 설명하는 데 도움이 될 수 있습니다.
rfelsburg

1

crontab에서 :

* * * *  /usr/bin/chromium-browser_starter

그런 다음 /usr/bin/chromium-browser_starter:

#!/bin/sh

# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).

for ((secs=0; secs<46; secs+=15)); do
    (sleep $secs; /usr/bin/chromium-browser "$@") &
done

wait

ps aux | grep chrom1 분 후에 글을 쓰면 크롬 브라우저가 실행되는 것을 볼 수 없습니다.
xralf

@xralf-스크립트는 최대 몇 초 동안 만 실행됩니다. 에 대해 grepping을 시도하십시오 sleep.
amphetamachine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.