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

5 초마다 실행해야하는 스크립트가 있습니다. 나는 아는 cron분으로 작업을 수행 할 수 있지만, 매 초마다 뭔가를 실행하는 방법은 무엇입니까?



답변

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

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

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

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


답변

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

* * * * * ~/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) &

하지만 제 질문은 5 초마다 실행해야하는 지구에서 무엇을 할 수 있습니까?


답변

루프를 사용하십시오.

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

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


답변

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

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

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


답변

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


답변

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


답변

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

서비스 단위가 호출 mystuff.service되어 설치되어 있다고 가정 하면 (사용자의 crontab을 교체하려는 경우 SystemD 사용자 서비스를/etc/systemd/system 확인하십시오 ), 다음과 같이 부팅시 및 5 초마다 서비스를 실행하는 타이머 단위를 작성할 수 있습니다.

/etc/systemd/system/mystuff.timer

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

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