시작 후 5 백만 개의 스크립트를 어떻게 실행합니까?


7

웹 서버에서 여러 RoR 웹 사이트를 실행 중이며 시작시 루비 스크립트를 실행해야합니다.

그래서 나는 bash 스크립트를 /etc/init.d에 넣고 ruby ​​프로세스를 호출합니다. 불행히도 루비 프로세스에는 아직로드되지 않은 것들이 필요합니다.

sleep 300bash 스크립트의 시작 부분에을 추가하려고했지만 ssh, apache 등과 같은 것들의 시작에 영향을 미치기 때문에 실제로 도움이되지 않습니다 ...

또한 부팅시 속도가 느려지기 때문에 시작할 때 모든 루비 라이브러리를로드하고 싶지 않습니다.

답변:


10

sleep 300 가는 방법이지만 비동기식이라고하는 함수에 넣어야합니다.

myscript()
{
    sleep 300

    # do what you want
}

myscript &

# continue with other things

6

5 분 동안 자면 꽤 불안정합니다. 나중에 부트 체인에서 무언가를 시작하는 데 시간이 오래 걸리면 어떻게됩니까? 왜 시스템을 부팅하는 데 필요한 시간보다 오래 걸립니까?

올바른 방법은 시작 스크립트가 종속 된 후에 시작 스크립트를 실행 하는 것입니다. 이를 수행하는 방법은 배포판마다 다릅니다.

데비안에서는 스크립트 헤더에 스크립트의 종속성을 지정합니다. 다음 /etc/init.d/README은 데비안 위지 (Debian Wheezy) 의 예입니다 .

# Required-Start:    $remote_fs $syslog

다른 시스템에서는 일반적으로 /etc/rc?.d/폴더 중 하나의 파일 이름에 스크립트 이름을 지정 합니다. 그러한 배포판에서는 의존하는 것보다 더 높은 수를 지정하십시오.


왜 불안정한가? 수면조차도 5m구문을 제공한다 . 5 분 이상 걸리는 부츠를 살펴 봐야하고 RoR 스크립트 실패가주의를 기울이는 좋은 방법이지만 올바른 방법은 아닙니다.
Tamara Wijsman

1
일반적으로 버그를 수정하기 위해 작업을 지연하면 동시성 문제가 있음을 나타내므로 시스템이 느려지거나 빨라질 때까지 지연을 추가하면 작동하기 때문에 불안정합니다.
AsTeR

0

다른 스레드를 시작할 수 있고 스레드가 수행하는 첫 번째 작업은 sleep 300입니다. 그런 다음 init.d에서 호출 한 스크립트를 호출합니다.

나는 그것이 같은 것 같아요

newscript &

0

파일 만들기 : delay

#!/bin/bash
# $1:delay time(s)
# $2:command
# example:
#    delay 10 "conky -d"

sleep $1
exec $2

그때

chmod a+x delay
delay 10 "xxx"

넣어 /etc/rc.local

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.