30 초마다 크론 실행


313

그래서 30 초마다 실행 해야하는 크론이 있습니다.

여기 내가 가진 것입니다 :

*/30 * * * * /bin/bash -l -c 'cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'''

실행되지만 30 분 또는 30 초마다 실행됩니까?

또한 cron을 자주 실행하면 사용하기에 가장 좋은 도구가 아닐 수도 있습니다. 더 나은 옵션이 될 Ubuntu 11.04에서 사용하거나 설치할 수있는 더 좋은 도구가 있습니까? 위의 cron을 수정하는 방법이 있습니까?


CommaToast, Javascript 또는 Java 앱이 어떤 이유로 넘어져서 종료되면 어떻게됩니까? 다시 시작하는 방법은 무엇입니까? :-)
paxdiablo

12
작은 NodeJS 앱을 추가하십시오. lol. 왜 작은 C ++ 앱이 아닌가? 우리가 그것을하고있는 동안, 우리는 이름을 'cron'이라고하고 서비스로 실행할 수 있습니다.
앤드류


방금 사용자 프로필을 보면서이 사실을 발견했으며 1 시간 전에 온라인 상태를 보았습니다 (액세스가 여전히 사용 중인지 확인하기 위해). 아래 답변 중 어느 것도 수락하지 않은 특별한 이유가 있습니까?
Fabian N.

답변:


731

당신은이 */30 지정자 - 즉, 매 순간하지만 (즉, 매 30 시간) 30 단계. cron1 분 미만의 해상도로 내려 가지 않기 때문에 다른 방법을 찾아야합니다.

약간의 kludge (a) 이지만 한 가지 가능성 은 두 가지 작업을 갖는 것입니다. 하나는 30 초씩 오프셋됩니다.

# Need these to run on 30-sec boundaries, keep commands in sync.
* * * * *              /path/to/executable param1 param2
* * * * * ( sleep 30 ; /path/to/executable param1 param2 )

주석을 추가하고 동기화하기 쉽도록 형식을 지정했습니다.

cron작업은 실제로 1 분마다 실행되지만 후자 는 작업의 "고기"를 실행하기 전에 30 분을 기다립니다 /path/to/executable.

기타 (비 대한 cron기반) 옵션, 여기에 다른 답변, 언급 특히 사람보고 fcronsystemd. 시스템에 시스템을 설치 fcron하거나 배포 하는 등의 기능을 사용할 수 있다고 가정하면이 방법이 바람직합니다 systemd.


당신이 경우 하지 않는 미봉책 솔루션을 사용하려면, 당신은 작은 수정을 가진 루프 기반의 솔루션을 사용할 수 있습니다. 프로세스를 어떤 형태로 계속 실행하도록 관리해야하지만 일단 정렬되면 다음 스크립트가 작동해야합니다.

#!/bin/env bash

# Debug code to start on minute boundary and to
# gradually increase maximum payload duration to
# see what happens when the payload exceeds 30 seconds.

((maxtime = 20))
while [[ "$(date +%S)" != "00" ]]; do true; done

while true; do
    # Start a background timer BEFORE the payload runs.

    sleep 30 &

    # Execute the payload, some random duration up to the limit.
    # Extra blank line if excess payload.

    ((delay = RANDOM % maxtime + 1))
    ((maxtime += 1))
    echo "$(date) Sleeping for ${delay} seconds (max ${maxtime})."
    [[ ${delay} -gt 30 ]] && echo
    sleep ${delay}

    # Wait for timer to finish before next cycle.

    wait
done

요령은 페이로드가 실행되기 전에 백그라운드sleep 30 에서 시작하지만 백그라운드 에서 시작하는 것입니다 . 그런 다음 페이로드가 완료된 후 백그라운드 sleep가 완료 될 때까지 기다리십시오 .

페이로드에 n초 (where n <= 30) 가 걸리면 페이로드 이후의 대기 30 - n시간은 초입니다. 걸리는 경우 보다 30 초 이상 페이로드가 더 이상 완료,하지만 때까지, 그 다음 사이클이 지연되지 않습니다.

출력을 처음에 더 쉽게 따르기 위해 1 분 경계에서 시작하기 위해 디버그 코드가 있음을 알 수 있습니다. 또한 페이로드가 30 초주기 시간을 초과하는 것을 볼 수 있도록 최대 페이로드 시간을 점차적으로 늘립니다 (공백이 추가되어 효과가 분명함).

샘플 실행은 다음과 같습니다 (여기에서 사이클은 이전 사이클 후 30 초 후에 시작 함).

Tue May 26 20:56:00 AWST 2020 Sleeping for 9 seconds (max 21).
Tue May 26 20:56:30 AWST 2020 Sleeping for 19 seconds (max 22).
Tue May 26 20:57:00 AWST 2020 Sleeping for 9 seconds (max 23).
Tue May 26 20:57:30 AWST 2020 Sleeping for 7 seconds (max 24).
Tue May 26 20:58:00 AWST 2020 Sleeping for 2 seconds (max 25).
Tue May 26 20:58:30 AWST 2020 Sleeping for 8 seconds (max 26).
Tue May 26 20:59:00 AWST 2020 Sleeping for 20 seconds (max 27).
Tue May 26 20:59:30 AWST 2020 Sleeping for 25 seconds (max 28).
Tue May 26 21:00:00 AWST 2020 Sleeping for 5 seconds (max 29).
Tue May 26 21:00:30 AWST 2020 Sleeping for 6 seconds (max 30).
Tue May 26 21:01:00 AWST 2020 Sleeping for 27 seconds (max 31).
Tue May 26 21:01:30 AWST 2020 Sleeping for 25 seconds (max 32).
Tue May 26 21:02:00 AWST 2020 Sleeping for 15 seconds (max 33).
Tue May 26 21:02:30 AWST 2020 Sleeping for 10 seconds (max 34).
Tue May 26 21:03:00 AWST 2020 Sleeping for 5 seconds (max 35).
Tue May 26 21:03:30 AWST 2020 Sleeping for 35 seconds (max 36).

Tue May 26 21:04:05 AWST 2020 Sleeping for 2 seconds (max 37).
Tue May 26 21:04:35 AWST 2020 Sleeping for 20 seconds (max 38).
Tue May 26 21:05:05 AWST 2020 Sleeping for 22 seconds (max 39).
Tue May 26 21:05:35 AWST 2020 Sleeping for 18 seconds (max 40).
Tue May 26 21:06:05 AWST 2020 Sleeping for 33 seconds (max 41).

Tue May 26 21:06:38 AWST 2020 Sleeping for 31 seconds (max 42).

Tue May 26 21:07:09 AWST 2020 Sleeping for 6 seconds (max 43).

클루 지 솔루션을 피하려면이 방법이 더 좋습니다. cron이 스크립트가 실행 중인지 정기적으로 감지하고 시작하지 않으면 시작 하는 작업 (또는 이와 동등한) 이 여전히 필요 합니다. 그러나 스크립트 자체는 타이밍을 처리합니다.


(a) 직장 동료 중 일부는 kludges가 내 전문이라고 말합니다.


29
이것은 훌륭한 해결 방법입니다. 너무 많아서 그것이 그것이 kludginess임을 초월한다고 생각합니다.
Question Mark

14
@ rubo77, 실행하는 데 1 초 미만이 걸린 경우에만 :-) 29 초가 걸리면 0:00:00, 0 : 00.59, 0:01:00, 0:01:59 등에서 발생합니다. .
paxdiablo

1
매우 몰래 매우 창의적인!
K Raphael

2
두 번째 줄 주위의 둥근 괄호는 무엇입니까?
Nigel Alderton

2
이 방법은 몇 분 안에 실행이 필요한 특정 작업에 대한 크론의 효율성을 약화시키는 문제에 대한 멋진 솔루션입니다. 감사합니다.
Fiddy Bux

67

당신은 할 수 없습니다. Cron의 세분성은 60 초입니다.

* * * * * cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\''
* * * * * sleep 30 && cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\''

이 구문은 paxdiablo와 동일합니까? 아니면 미묘한 차이가 있습니까?
니콜라스 라울

차이점은 : 나는 바이너리의 원래 경로를 사용했다. @paxdiablo는 일종의 메타 구문을 사용했습니다. (와 하위 쉘을 호출)
wildplasser

1
&&대신을 사용 했습니다 ( ; ).
Nicolas Raoul

2
죄송합니다. 아니요, 차이가 있습니다. &&운영자 단락, 이전에 실패한 경우 체인의 다음의 명령이 실행되지 않도록.
wildplasser

이 세분성은 1 분 미만의 해상도에서는 문제가되지 않습니다.
후안 이사 자

37

Cron의 세분성은 몇 분 안에 이루어지며 무언가를 실행 하기 위해 매초마다 일어나도록 설계 되지 않았습니다x . 루프 내에서 반복 작업을 실행하면 필요한 작업을 수행해야합니다.

#!/bin/env bash
while [ true ]; do
 sleep 30
 # do what you need to here
done

54
아닙니다 명심 매우 동일. 작업이 25 초가 걸리면 (예를 들어) 30 초가 아닌 55 초마다 시작됩니다. 중요하지는 않지만 가능한 결과를 알고 있어야합니다.
paxdiablo

7
백그라운드에서 작업을 실행할 수 있으며 거의 ​​정확히 30 초 후에 실행됩니다.
Chris Koston

1
반면 [사실] 잠 30 # 당신이 작은 경우에 있어야 여기 --------- 수행 할 필요가 무엇을합니까
사원

1
하지 않음 while [ true ]크론은 새로운 분마다 시작하기 때문에 원인은 당신이 동일한 스크립트의 인스턴스를 많이해야합니다?
Carcamano

2
sleep $remainingTime잔여 시간이 작업에서 걸린 시간에서 30을 뺀 위치에서 수행 할 수 있습니다 (30 초 이상 걸리면 0으로 제한). 따라서 실제 작업 전후에 시간을 가지고 차이를 계산하십시오.
mahemoff

32

SystemD와 함께 최신 Linux OS를 실행하는 경우 SystemD Timer 장치를 사용하여 원하는 세분성 수준 (이론적으로 나노초까지)으로 스크립트를 실행할 수 있으며 원하는 경우 Cron이 허용하는 것보다 훨씬 유연한 시작 규칙을 사용할 수 있습니다 . kludges가 필요 하지 sleep않습니다

cron 파일에서 한 줄보다 설정하는 데 약간의 시간이 걸리지 만 "매 순간"보다 더 나은 것이 필요하면 노력할 가치가 있습니다.

SystemD 타이머 모델은 기본적으로 다음과 같습니다. 타이머는 타이머가 경과 할 때 서비스 단위를 시작하는 단위입니다 .

따라서 예약하려는 모든 스크립트 / 명령에 대해 서비스 단위와 추가 타이머 단위가 있어야합니다. 단일 타이머 장치는 여러 일정을 포함 할 수 있으므로 일반적으로 하나 이상의 타이머와 하나의 서비스가 필요하지 않습니다.

다음은 10 초마다 "Hello World"를 기록하는 간단한 예입니다.

/etc/systemd/system/helloworld.service:

[Unit]
Description=Say Hello
[Service]
ExecStart=/usr/bin/logger -i Hello World

/etc/systemd/system/helloworld.timer:

[Unit]
Description=Say Hello every 10 seconds
[Timer]
OnBootSec=10
OnUnitActiveSec=10
AccuracySec=1ms
[Install]
WantedBy=timers.target

/etc/systemd/system위에서 설명한대로 시스템 전체 설정 또는 ~/.config/systemd/user사용자 별 설정 에서 이러한 단위를 설정 한 후 다음 을 실행하여 타이머를 활성화해야합니다 systemctl enable --now helloworld.timer( --now플래그도 타이머를 시작 함). 그렇지 않으면 다음 부팅 또는 사용자 로그인 후에 만 ​​시작됩니다).

[Timer]여기에 사용 된 섹션 필드는 다음과 같습니다.

  • OnBootSec -부팅 후 몇 초 동안 서비스를 시작하십시오.
  • OnUnitActiveSec-서비스가 마지막으로 시작된 후 몇 초 후에 서비스를 시작하십시오. 이것이 타이머 자체를 반복하고 크론 작업처럼 행동하게 만드는 원인입니다.
  • AccuracySec-타이머의 정확도를 설정합니다. 타이머는이 필드가 설정 한 대로만 정확하며 기본값은 1 분입니다 (크론을 에뮬레이트 함). 최고의 정확도를 요구하지 않는 주된 이유는 전력 소비를 개선하는 것입니다. SystemD가 다른 이벤트와 일치하도록 다음 실행을 예약 할 경우 CPU를 덜 자주 깨워 야합니다. 1ms에 나는 보통 세트 정확성 - 위의 예는 적합하지 않습니다 1내 하위 분 예약 된 작업 (1 초),하지만 당신이 "안녕하세요"메시지를 보여주는 로그를 보면, 당신은 것을 볼 수있을 것을 의미 종종 1 초 늦습니다. 괜찮 으면 정확도를 1 초 이상으로 설정하는 것이 좋습니다.

알다시피,이 타이머는 Cron을 잘 모방하지는 않습니다. 즉, 모든 벽시계 기간이 시작될 때 명령이 시작되지 않는다는 의미입니다 (즉, 시계의 10 초에 시작되지 않음, 그런 다음 20 등). 대신 타이머가 경과 할 때 발생합니다. 시스템이 12:05:37에 부팅 된 경우 다음에 명령이 실행될 때 12:05:47, 12:05:57 등이됩니다. 실제 벽시계 정확도에 관심이있는 경우 OnBootSecOnUnitActiveSec필드 를 바꾸고 대신 OnCalendar원하는 일정으로 규칙을 설정하십시오 (알고있는 한 달력 형식을 사용하여 1 초보다 빠를 수는 없습니다). 위의 예제는 다음과 같이 작성할 수도 있습니다.

OnCalendar=*-*-* *:*:00,10,20,30,40,50

마지막 참고 사항 : 짐작할 수 있듯이 helloworld.timer장치 helloworld.service이름이 같기 때문에 장치가 시작됩니다 (장치 유형 접미사 제외). 이것이 기본값이지만 섹션 의 Unit필드를 설정하여이를 무시할 수 있습니다 [Timer].

자세한 내용은 다음에서 확인할 수 있습니다.


2
나는 종종 의견 섹션에서 이와 같은 더 나은 답변을 보게됩니다. IMHO, cron은 예정된 작업에 필수 요소이지만이 답변은 수면의 "해킹 작업"이
아니고

2
최상의 답변, 선택한 답변이어야합니다
GuidedHacking

21

두 개의 cron 항목이 필요하지 않으므로 다음을 사용하여 하나를 넣을 수 있습니다.

* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"

그래서 귀하의 경우 :

* * * * * /bin/bash -l -c "cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'' ; sleep 30 ; cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\''"


11
참고 : 스크립트 실행 시간이 1 초 미만인 경우에만 올바르게 실행됩니다.
rubo77

2
Rubo-작업을 완료하는 데 시간이 오래 걸리면 (밀리 초 또는 마이크로 초 대신), 분당 두 번 실행할 수 있도록 30 초마다 실행하지 않습니다. 예, 30으로 시작한 다음 1 초보다 큰 경우 실행 당 대략적인 초 수에서 빼십시오.
Andrew

2
각 실행에 대해 개별적으로 오류 보고서를 수신하려는 경우에도 도움이되지 않습니다.
joeln

joelin-내가주는 명령으로 로그 또는 출력 데이터를 얻지 못하므로 질문을 해결하기 위해 명령을 단순화했습니다. 로깅을 캡처하려면 로깅이 필요한 경우 각 명령이 출력을 리디렉션해야합니다 (예 : script / rails runner -e production '\' 'Song.insert_latest'\ ''는 script / rails runner -e production '\'로 작성 될 수 있음) 'Song.insert_latest'\ ''2> & 1> / path_to_logfile 및 단일 cron 항목 내의 각 명령에 대해 다시 수행 할 수 있습니다.
앤드류

13

이 비슷한 질문에 대한 내 대답을 확인할 수 있습니다

기본적으로, 나는 "runEvery.sh"라는 bash 스크립트를 포함 시켰습니다.이 스크립트는 1 분마다 cron으로 실행할 수 있고 실행하려는 실제 명령과 실행하려는 빈도 (초)를 인수로 전달합니다.

이 같은

* * * * * ~/bin/runEvery.sh 5 myScript.sh


10

시계 사용 :

$ watch --interval .30 script_to_run_every_30_sec.sh

같은 것을 사용할 수 $ watch --interval .10 php some_file.php있습니까? 또는 watch.sh 파일에서만 작동합니까?
Yevhenii Shashkov 2016

시계로 무엇이든 실행할 수 있습니다. 그러나 간격은 다음 명령의 끝과 시작 사이에 있으므로 --interval .301 분에 두 번 실행되지 않습니다. 즉 watch -n 2 "sleep 1 && date +%s", 3 초마다 증가합니다.
jmartori 2016 년

주의 사항 watch은 터미널없이 작동 할 수있는 동안 (실행 - 그래서, 터미널 사용을 위해 디자인 된 nohup후 로그 아웃) 또는 (같은 가짜의 단자를 screen) -이 같은 실패에서 복구 등의 크론 같은 행동에 대한 어포던스를 가지고 있지 부팅 후 재시작 등
거스

9

Cron 작업은 초 간격으로 작업을 예약하는 데 사용할 수 없습니다. 즉, cron 작업이 5 초마다 실행되도록 예약 할 수 없습니다. 대안은 sleep 5명령 을 사용하는 쉘 스크립트를 작성하는 것입니다.

아래와 같이 bash while 루프를 사용하여 5 초마다 쉘 스크립트를 작성하십시오.

$ cat every-5-seconds.sh
#!/bin/bash
while true
do
 /home/ramesh/backup.sh
 sleep 5
done

이제 nohup아래와 같이 셸 스크립트를 백그라운드에서 실행하십시오 . 세션에서 로그 아웃 한 후에도 스크립트가 계속 실행됩니다. 그러면 5 초마다 backup.sh 셸 스크립트가 실행됩니다.

$ nohup ./every-5-seconds.sh &

4
시간이 표류 할 것입니다. 예를 들어 backup.sh실행 하는 데 1.5 초가 걸리면 6.5 초마다 실행됩니다. 이를 피할 수있는 방법이 있습니다sleep $((5 - $(date +%s) % 5))
Keith Thompson

나는 nohup을 처음 사용하지만 예제를 실행하는 동안 nohup은 'no such file or directory'를 반환합니다. 일부 검색 후 nohup 후 'sh'를 놓친 것 같습니다. $ nohup sh ./every-5-seconds.sh &
VHanded

6

fcron 사용 ( http://fcron.free.fr/)- 초 단위로 세분화되고 cron (vixie-cron)보다 풍부하고 안정적인 기능을 제공합니다. 나는 매우 어리석은 설정으로 한 컴퓨터에서 약 60 PHP 스크립트를 실행하는 것과 같은 어리석은 것들을 만들었지 만 여전히 그 일을했습니다!


1
PHP 개발자의 고백; )
Eric Kigathi

3
실제로, PHP 개발자를 가능하게하는 시스템 엔지니어의 고백 .... :)
Adi Chiru

6

dir에서 /etc/cron.d/

새로운 파일 만들기 excute_per_30s

* * * * * yourusername  /bin/date >> /home/yourusername/temp/date.txt
* * * * * yourusername sleep 30; /bin/date >> /home/yourusername/temp/date.txt

30 초마다 cron을 실행합니다


4

현재 아래 방법을 사용하고 있습니다. 문제없이 작동합니다.

* * * * * /bin/bash -c ' for i in {1..X}; do YOUR_COMMANDS ; sleep Y ; done '

N 초 마다 실행하려면 X60 / N 이고 YN 입니다.

감사합니다.


당신은 아마 변경할 YOUR_COMMANDSYOUR_COMMANDS &명령이 순식간보다 더 걸리는 경우 명령이, 그렇지 않으면 배경에 시작됩니다 그래서, - 그것은 다음 발사를 연기합니다. 따라서 X = 2이고 Y = 30이면 명령이 10 초가 걸리면 30 분 대신 1 분에 40 초 후에 시작됩니다. Kudus에서 @paxdiablo로.
Guss

어떤 이유로 든 /bin/bash -c(인수 따옴표 포함) 부분을 생략하면 스크립트는 매 분마다 실행되며 반복 (내 경우 X=12Y=5)을 무시합니다 .
abiyi

3

Crontab 작업을 사용하여 작업을 분 / 시간 / 일 단위로 예약 할 수 있지만 초 단위로는 수행 할 수 없습니다. 대안 :

30 초마다 실행할 스크립트를 작성하십시오.

#!/bin/bash
# 30sec.sh

for COUNT in `seq 29` ; do
  cp /application/tmp/* /home/test
  sleep 30
done

crontab -e이 스크립트를 실행 하려면 및 crontab을 사용하십시오 .

* * * * * /home/test/30sec.sh > /dev/null

2
이것을 올바르게 이해하면이 스크립트는 30 번 실행되며 매 반복마다 30 초 동안 기다립니다. cron에서 매분마다 실행하는 것이 합리적입니까?
FuzzyAmi

2

해당 스크립트를 서비스로 실행하고 30 초마다 다시 시작할 수 있습니다.

서비스 등록

sudo vim /etc/systemd/system/YOUR_SERVICE_NAME.service

아래 명령에 붙여 넣기

Description=GIVE_YOUR_SERVICE_A_DESCRIPTION

Wants=network.target
After=syslog.target network-online.target

[Service]
Type=simple
ExecStart=YOUR_COMMAND_HERE
Restart=always
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

서비스 재로드

sudo systemctl daemon-reload

서비스 활성화

sudo systemctl enable YOUR_SERVICE_NAME

서비스 시작

sudo systemctl start YOUR_SERVICE_NAME

서비스 상태 확인

systemctl status YOUR_SERVICE_NAME

1

모든 좋은 답변에 감사드립니다. 간단하게하기 위해 나는 crontab에 대한 제어와 스크립트의 시분할로 혼합 솔루션을 좋아했습니다. 그래서 이것은 20 초마다 (분당 3 번) 스크립트를 실행하는 것입니다. 크론 탭 라인 :

 * * * * 1-6 ./a/b/checkAgendaScript >> /home/a/b/cronlogs/checkAgenda.log

스크립트:

cd /home/a/b/checkAgenda

java -jar checkAgenda.jar
sleep 20
java -jar checkAgenda.jar 
sleep 20
java -jar checkAgenda.jar 

1-6은 무엇을 나타 냅니까?
Phantom007

@ Phantom007 1-6은 월요일부터 토요일을 나타냅니다. 여기서 "-"는 범위이고 "0"은 일요일입니다. " crontab.guru/# * _ * _ * _ * _ 1-6"
jfajunior

1

하나의 쉘 스크립트 작성 .sh 파일 작성

nano every30second.sh

스크립트 작성

#!/bin/bash
For  (( i=1; i <= 2; i++ ))
do
    write Command here
    sleep 30
done

그런 다음이 스크립트에 cron을 설정하십시오. crontab -e

(* * * * * /home/username/every30second.sh)

이 cron 호출 .sh 파일은 1 분마다 및 .sh 파일 명령에서 1 분에 2 회 실행됩니다.

5 초 동안 스크립트를 실행하려면 30을 5로 바꾸고 다음과 같이 루프를 변경하십시오. For (( i=1; i <= 12; i++ ))

당신이 어떤 초를 선택할 때 당신의 초 당 60을 계산하고 For 루프에 쓰십시오


0

방금 다음과 같은 접근 방식을 사용하고 비슷한 작업을 수행했습니다.

nohup watch -n30 "kill -3 NODE_PID" &

몇 시간 동안 30 초마다 주기적으로 킬 (3) (프로그램의 스택 추적을 얻으려면)을 죽여야했습니다.

nohup ... & 

이것은 쉘을 느슨하게하면 (네트워크 문제, Windows 충돌 등) 시계 실행을 잃지 않도록하기 위해 여기에 있습니다.


0

잦은 크론을 살펴보십시오. 오래되었지만 매우 안정적이며 마이크로 초까지 내려갈 수 있습니다. 이 시점에서 내가 말할 유일한 것은 init.d 외부에 설치하는 방법을 여전히 노력하고 있지만 기본 시스템 서비스로 작동하지만 확실히 Ubuntu 18까지 작동한다는 것입니다. 여전히 init.d를 사용하는 것이 좋습니다 (거리는 후자의 버전에 따라 다를 수 있습니다). 이전 스크립트가 완료되지 않은 경우 다른 PHP 스크립트 인스턴스가 생성되지 않도록하여 메모리 누수 문제를 줄일 수 있다는 추가 이점 (?)이 있습니다.


-1

쉘 루프에서 실행하십시오 (예 :

#!/bin/sh    
counter=1
while true ; do
 echo $counter
 counter=$((counter+1))
 if [[ "$counter" -eq 60 ]]; then
  counter=0
 fi
 wget -q http://localhost/tool/heartbeat/ -O - > /dev/null 2>&1 &
 sleep 1
done

그것이 60이어야 한다고 가정하더라도 , 문장 에서 그것을 30옮기고 싶을 수도 있습니다 . 그렇지 않으면 매 초마다 실행됩니다. 어쨌든, 이것이 하나의 것보다 얼마나 좋은지 잘 모르겠습니다 . 카운터가 아닌 실제 UNIX 시간을 모니터링하는 경우에는 차이가 있습니다. wget ifsleep 30
paxdiablo

카운터 출력을 에코하면 백그라운드에서 wget을 실행하지 않으면 EXCUTE COMMAND에 의해 지연된 시간을 찾을 수 있습니다.
Lo Vega
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.