it-gundan.com

5 초마다 스크립트를 실행하는 방법은 무엇입니까?

5 초마다 실행해야하는 스크립트가 있습니다. cron은 (는) 분 단위로 작업을 수행 할 수 있지만 매 초마다 무언가를 실행할 수있는 방법이 있습니까?

65
myusuf3

Cron은 최소 1 분만 허용합니다. 당신이 could 할 일은 무한 루프가있는 쉘 스크립트를 작성하여 작업을 실행 한 다음 5 초 동안 대기합니다. 이렇게하면 작업 자체에 걸리는 시간에 따라 5 초마다 작업이 다소 실행됩니다.

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

위의 내용으로 my-task.sh 파일을 생성하고 sh my-task.sh로 실행할 수 있습니다. 선택적으로 supervisor을 시스템으로 부팅 할 때 시작되도록 서비스로 구성 할 수 있습니다.

그것은 당신이 아마해서는 안되는 일을하고있는 것처럼 들립니다. 느낌이 잘못된 입니다.

64
Tommy Brunn

12 개의 백그라운드 프로세스를 시작하는 cron 작업이 매 분마다 스크립트를 시작하도록 할 수 있습니다.

* * * * * ~/dostuff.sh

dostuff.sh :

(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &

그러나 내 질문은 EARTH 에서 무엇을 할 수 있습니까? 매 5 초마다 실행해야합니까?

35
warren

루프를 사용하십시오.

while true ; do ./your-script & sleep 5; done

그러면 스크립트가 백그라운드 작업으로 시작되고 5 초 동안 잠자기 한 다음 다시 반복됩니다. Ctrl-C를 사용하여 중단하거나 true 대신 다른 조건을 사용할 수 있습니다 (예 : ! test -f /tmp/stop-my-script 파일이 존재하지 않는 동안에 만 /tmp/stop-my-script를 반복합니다.

27
blueyed

"Vixie cron"대안 인 GNU 패키지 mcron 을 사용할 수 있습니다.

http://www.gnu.org/software/mcron/manual/mcron.html#Top

"보다 세밀한 시점, 즉 초를 쉽게 지정할 수 있습니다. 원칙적으로 이것은 마이크로 초로 확장 될 수 있지만 구현되지는 않습니다."

10
David

Cacti를 사용하여 라우터와 스위치를 모니터링하십시오. 그러나 Cron은 최소 1 분만 허용하므로 포트/장치가 다운 된 경우 2 분이 지나야 경고가 표시되지 않습니다.

2
qttty

Cron의 최소 구성은 분이며 5 초 동안 설정할 수 없습니다. 초를 허용하는 Quartz를 사용할 수 있습니다. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

2
Cody Harlow

SystemD 타이머 장치를 사용하면 5 초마다 원하는 서비스를 설정하는 서비스가 트리거됩니다.

서비스 단위가 mystuff.service이고 /etc/systemd/system에 설치되어 있다고 가정하고 ( SystemD 사용자 서비스 사용자의 crontab을 바꾸려면) 타이머 단위를 작성할 수 있습니다. 다음과 같이 부팅 할 때와 5 초마다 서비스를 실행합니다.

/etc/systemd/system/mystuff.timer

[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target

그런 다음 시스템 구성을 다시로드하고 타이머 장치를 활성화 한 후 시작하십시오.

2
Guss

나는 이런 종류의 일을 매우 성공적으로 수행했습니다 (그리고 기계가 재부팅 될 때까지 최종 결과는 한 번에 몇 주에 걸쳐 실행됩니다). 내가 지금하고있는 일은 정보를 업데이트하고 캐시에 넣는 것-매 10 초마다 업데이트됩니다.

#!/bin/sh

SLEEP=5

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# echo and restart...
exec $0

'exec $ 0'은 스크립트를 다시 시작하지만 실행중인 스크립트를 교체합니다. 처음에는 crontab '@reboot'줄로 시작할 수 있습니다.

1
Alister Bulman