cron을“무작위”로 만들 수 있습니까?


12

어쩌면 나는 완전히 미쳤고, 그렇다면-괜찮습니다. 그러나 어떻게 임의의 일정에 따라 구피 메시지를 브로드 캐스트하도록 작업을 예약 fortune합니까?

설명
예-이것은 내 개인 워크 스테이션입니다-프로덕션 서버에서 이상한 것을 할 계획은 없습니다 :)

답변:


12

at이 유형의 목적을 위해 인터페이스 at가 설치되어 있고 기계가 실행 중이며 atd사용자가 명령을 사용할 수 있는 경우 더 간단한 인터페이스를 갖습니다 .

(예를 들어, 정확한 구문을 이용하여 확인 man at하거나 info at,)

at -f 파일 now + 53 minutes

또는

at -f 파일 now + 2 hours

지정된 파일에서 명령을 각각 53 분 또는 2 시간 내에 실행합니다.

at 그런 다음 예약 된 작업이 시작될 때 적절한 (임의 또는 기타) 시작, 수 및 시간 단위로 다시 실행할 수 있습니다.

편집하다

Arjan이 아래에서 유용하게 지적했듯이 장난감 응용 프로그램 이외의 용도로 이것을 사용하는 경우 발생하는 문제와 같은 문제에 대해 생각해야합니다.

  1. 이전 실행이 끝나기 전에 다음 실행이 시작되는 경우 (예 : 스크립트가 재진입합니까?)

  2. 실행이 올바르게 완료되지 않거나

  3. 다음 실행이 전혀 또는 정시에 시작되지 않는 경우 (예 : 다음 실행이 시작될 때 기계가 꺼지면 어떻게되는지)

  4. 실패 또는 성공한 실행의 로깅 및보고에 대해.


그것은 내가 고려하지 않은 접근법입니다- file다음 at실행이 포함되어 있으면 재귀 적으로 될 수 있습니까?
warren

위대한-그냥 그것을 시도하고 훌륭하게 작동 :)
워렌

2
+1이지만 몇 가지 고려해야 할 사항 : at-command가 첫 번째 행이고 스크립트가 장시간 (또는 간격이 짧은 경우) 실행되는 경우 여러 인스턴스를 동시에 실행하는 것을주의하십시오. 그러나 at스크립트의 마지막 줄에있을 때 스크립트가 실패하면 다시 예약되지 않습니다. 또한 명령 줄에서 스크립트를 실행하면 스크립트 자체도 일정이 변경됩니다 (그리고 여러 일정이 동시에 존재할 수 있음). 그리고 cron이메일을 통한 모든 오류 전송 (또는 일반적으로 출력)을 지원합니다. 나도 그런 것이 있는지 모르겠다 at?
Arjan

@Arjan - - 나도 그것이 내가 그냥 ..however 내 워크 스테이션 :)에 재미를 위해 그것을 사용하고 있습니다 (이 시점에서) 때문에 .. 나에게 이메일을 보내 실패하지 걱정하고 있지 않다 인가 에 대해 생각하는 뭔가 이것이 침입에 대한 무작위 점검으로 확대 되었다면
warren

나는 자신의 얼마나 많은 복사본을 상관하지 않습니다 구상하고있어 스크립트를 한 번에 실행
워렌

13

나는 / etc / crontab에 모든 종류의 일을하는 많은 명령을 가지고 있으며 몇 초 안에 정밀도가 필요합니다. 이제 cron은 더 세밀한 해상도를 유지하면서 모든 시간을 가시적이고 집중적으로 유지할 수 있습니다.

이 예제는 5 분마다 10 초에서 50 초 사이에 웹 페이지를 가져와 구문 분석합니다.

4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch

데이터가 느리게 이동하기 때문에 정확한 시간을 가질 필요는 없지만 웹 페이지를 기다리지 않아도 munin-node 실행 시간을 가능한 한 낮게 유지하는 데 도움이됩니다. (플러그인은 불필요한 적중을 줄이기 위해 30 분 동안 페이지를 추가로 캐시하지만 5 분마다 데이터베이스를 업데이트해야합니다).

\ % — cron은 "\ n"을 %로 대체합니다. 메일 텍스트를 한 줄에 유지하는 데 유용합니다.


웹 페이지를 캐싱하는 경우 반드시 정확한로드 결과를 얻지 못할 수도 있습니다.
warren

1
예, 알고 있습니다- '데이터가 느리게 이동합니다'-플러그인이 사이트에서 환율을 가져오고 금지하고 싶지 않습니다. (나는 상인은 아니지만 munin 그래프를 보는 데 많은 시간을 소비합니다) 현지 날씨와 비슷한 플러그인을 만들었습니다. 끝없는 응용 프로그램!
Andy Lee Robinson

1
아하! .. very cool approach :)
워렌

6

내부적으로 cron는 그런 기능이 있다고 생각하지 않습니다. 최선의 해결책은 명령을 쉘 스크립트 sleep에 넣고 스크립트 맨 위에 임의의 간격을두고 $RANDOM변수를 사용하는 것 입니다. 그런 다음 일반 크론 작업에서 하루에 한 번 스크립트를 실행하십시오.

#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2

1
sleep ()은 서비스 제공 업체에 의해 종료 될 것이라는 거의 보증입니다. 물론, 그는 서비스 제공 업체입니다.
난쟁이

1
나는 누군가에게 무작위로 재산을 제시한다면 자신의 리눅스 머신이나 다른 것으로 가정했다
John T

글쎄, 그건 사실이야
난쟁이

왜 수면이 나쁜 생각입니까? 그냥 묻는 ...
Tadeusz A. Kadłubowski

@ 존 T에 대한 질문이 명확
워렌

6

그것은 당신이 어떤 간격의 유형에 따라 달라집니다. 그러나 스크립트를 1:30 확률로 무작위로 실행한다고 가정합니다 (30 분마다 한 번).

  • 10 분의 주기로 cron 스크립트를 빌드하십시오. 30 분마다 3 번 발사됩니다.

  • 스크립트 내에서 randif 문의 조건으로 사용 합니다. rand가 0과 2 사이의 숫자를 리턴하기를 원합니다. 0이면 if 문의 내용을 실행하십시오.

기본적으로 스크립트는 항상 설정된 간격으로 실행됩니다. 그러나 관심있는 명령 만 무작위로 실행합니다. 서비스 제공 업체가 감사합니다.


@A 드워프 - 덕분에이 아이디어도 - 좀 자주하지만 준 임의 기준으로 침입 등을 확인하기를 원한다면이 약간 더 유용 노선 것
워렌
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.