5 초마다 실행해야하는 스크립트가 있습니다. 나는 아는 cron
분으로 작업을 수행 할 수 있지만, 매 초마다 뭔가를 실행하는 방법은 무엇입니까?
sleep 5
5 초 동안 일시 정지 (아마도 루프 내에서) ...?
5 초마다 실행해야하는 스크립트가 있습니다. 나는 아는 cron
분으로 작업을 수행 할 수 있지만, 매 초마다 뭔가를 실행하는 방법은 무엇입니까?
sleep 5
5 초 동안 일시 정지 (아마도 루프 내에서) ...?
답변:
Cron은 최소 1 분만 허용합니다. 당신이 할 수있는 일은 작업을 실행 한 다음 5 초 동안 대기하는 무한 루프가있는 쉘 스크립트를 작성하는 것입니다. 이렇게하면 작업 자체에 걸리는 시간에 따라 5 초마다 작업이 다소 실행됩니다.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
my-task.sh
위의 내용 으로 파일을 생성 하고로 실행할 수 있습니다 sh my-task.sh
. 선택적으로 supervisor
시스템을 부팅 할 때 시작되도록 서비스로 구성 할 수 있습니다 .
그것은 당신이 아마해서는 안되는 일을하고있는 것처럼 들립니다. 이것은 잘못 느낀다 .
cron
12 분의 백그라운드 프로세스를 시작하는 매분마다 작업이 스크립트를 시작하도록 할 수 있습니다 .
* * * * * ~/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 초마다 실행해야하는 지구에서 무엇을 할 수 있습니까?
/media
자동 백업을 위해 USB에 연결하는 드라이브 의 디렉토리를 반복적으로 검사하는 스크립트를 만들 때 유용했습니다 ...
What on EARTH
-통계, 가비지 수집, 파일 동기화, 온라인 상태, 이름을 지정합니다.
루프를 사용하십시오.
while true ; do ./your-script & sleep 5; done
그러면 스크립트가 백그라운드 작업으로 시작되고 5 초 동안 잠자기 한 다음 다시 반복됩니다. 당신은 그것을 중단 Ctrl-C를 사용하거나 대신 다른 조건을 사용할 수 있습니다 true
, 예를 들어, ! test -f /tmp/stop-my-script
파일이있는 동안 만 루프에 /tmp/stop-my-script
존재하지 않습니다.
bash: syntax error near unexpected token ';'
되어 꺼내 었습니다. bash 4.3.11이 있습니다. 내 명령은 빨리 실행되므로 전경에서 실행해도 괜찮습니다.
./your-script
백그라운드에서 실행 해야하는 경우 (5 초 동안 잠자기 상태)을 유지 &
하면서 떨어 뜨릴 수 ;
있습니다. 으로 &
명령을 분리하는 용도로 사용, 그것은해야 할 필요는 (분명히 허용되지 않는)의 ;
같은 줄에 후. 또 다른 방법은 (후 줄 바꿈으로 여러 줄의 루프를 작성하는 것입니다 &
및, 선택적으로, 라인이 후 휴식 do
및 이전 done
뿐만 아니라). 때문에 ;
후는 &
오타 것으로 보인다, 나는 그것을 제거했습니다. blueyed : ;
당신이 정말로 원한다면 등을 자유롭게 두십시오; 그렇다면 설명도 추가하는 것이 좋습니다.
"Vixie cron"대안 인 GNU 패키지 mcron을 사용할 수 있습니다 .
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"미세한 시점, 즉 초를 쉽게 지정할 수 있습니다. 원칙적으로 이는 마이크로 초로 확장 될 수 있지만 구현되지는 않았습니다."
mcron
sendmail
기본적으로 설치 및 활성화 해야 합니다. 비활성화하는 방법?
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
그런 다음 시스템 구성을 다시로드하고 타이머 장치를 활성화 한 후 시작하십시오.
나는 이런 종류의 일을 매우 성공적으로 수행했습니다 (그리고 기계가 재부팅 될 때까지 최종 결과는 한 번에 몇 주에 걸쳐 실행됩니다). 내가 지금하고있는 일은 정보를 업데이트하고 캐시에 넣는 것-매 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'줄로 시작할 수 있습니다.
while
스크립트를 반복해서 다시 시작하는 대신 루프를 사용하지 않는 이유는 무엇 입니까?