2013-07-05 4 views
0

나는 끝내기까지 몇 시간이 걸릴 수있는 bash 스크립트가 있습니다.php가 끝날 때까지 bash 스크립트를 실행하고 실행합니다.

나는 그것을 사용하기 쉽게하기 위해 웹 프론트 엔드를 가지고있다. 이 메인 페이지에

, 나는 내 PHP는 명령

<?exec('myscript that take a long time');?> 

시작 간부가 완료되면, 나는 그것이 쿠키를로드 할 것을 눌러 URL을 가지고 싶어.

이것은 모두 쉽게 수행 할 수 있습니다. 그러나 내 exec 명령을로드하는 URL은 빈 페이지입니다. 나는 이것을 원하지 않는다. url은 내 phpscript를 시작하고 exec 명령이 백그라운드에서 모두를 반환 할 때 쿠키를 설정하는 작업이되기를 원합니다.

이것이 가능합니까?

그렇지 않은 경우이 동작과 얼마나 근접합니까?

편집 : 나는 행운과 위의 코드를 시도

function foo(){ 

var conn = new Ext.data.Connection(); 
conn.request({ 
url:‘request.php’, 
method:‘POST’, 
success: function(responseObject) { 
    alert(“Hello,Word!”); 
}, 
failure: function() { 
alert(“Something fail”); 
} 
});} 

.

+0

첫째, 왜 이것을하고 싶습니까? 정기적으로 실행되는 것이면 cron을 설정하는 것이 좋습니다. 또한,'exec ('nohup myscript가 오랜 시간이 걸리는 &')'이후에'setcookie()' – nand

+0

을 제안 할 수 있습니다. 그러면 스크립트가 실제로 끝날 때 실행 된 exec가 끝나자 마자 쿠키가 설정됩니다. – Cripto

+0

사실, 나는 그 부분을 놓쳤다. 그러나 쿠키의 용도에 따라 쿠키가 무효화 될 수 있습니까? 사소한 일은 존재를 확인하거나 읽을 수있는 파일을 "만지는"또 다른 명령을 추가하는 것입니다. – nand

답변

0

다른 대답은 정확하고 WWW는 공개 요청을위한 것이 아니지만 www가 결코 의미가 없다고 생각해야합니다. to take information.

프로그래머는 로그인과 같은 정보를 사용하도록했습니다.

더 많은 질문을 던지면 간단합니다. 어떻게 액션 A를 결과 B로 저지 할 수 있습니까? @symcbean의 다른 게시물에서 보았을 때 이메일을 보내고 멋지게 만드는 것이 좋지만 해결책은 아니지만 문제를 회피합니다. .

웹 응용 프로그램은 상태를 업데이트하기 위해 웹 서버와 통신해야하는 경우가 있습니다. Websterver가 무국적이기 때문에 이것은 모순입니다. 쿠키는 영혼입니다.

$.ajax({ 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 
setcookie('status',"done"); 

URL이 PHP 함수 페이지는 if 문 switch 문 역할을하고 정말 시간이 오래 걸립니다 내 외부 스크립트를 실행하는 것입니다 :

여기 내 솔루션이었다. 이 호출은 차단됩니다. 즉, 완료 될 때까지 setcookie를 실행하지 않습니다.

일단 쿠키가 설정되면 내 쿠키가 설정되고 나머지 웹 응용 프로그램은 계속 작동 할 수 있습니다.

7

나는 시간이 걸릴 수있는 bash는 스크립트가

중지를 완료해야합니다. 그것이 첫 번째 문제입니다. WWW는 공개 요청을 2 분 이상 유지하도록 설계되지 않았습니다. 어쩌면 언젠가는 (우리는 이제 웹 소켓을 가지고 있기 때문에) 어쩌면 여러분이 웹 서버를 구성하는 방법을 알고 있어도 지나가는 사람들에게는 오프 스위치가 아니어도, 브라우저 사이의 네트워크가 브라우저를 기다릴 것 같지 않습니다. 긴.

이 작업의 실행은 웹 요청과 동시에 수행 할 수 없습니다. 그것 must be run asynchronously.

꼭 메타 - 새로 고침이나 아약스를 통해 웹 페이지에서 작업 상태를 폴링합니다. 그러나 작업이 완료되면 쿠키를 설정할 때의 이점을 이해하는 데 문제가 있습니다. 일반적으로 작업이 완료되면 이메일을 발송합니다. 이와 같이 호출 된 동시 작업을 분리하거나 한 번에 하나만 실행되도록하는 방법이 필요합니다.

한 가지 해결책은 PHP 세션 ID를 스크립트에 인수로 전달한 다음 스크립트가 완료되면 세션 ID로 이름 지정된 파일을 작성하거나 파일을 통해 부분 업데이트를 제공하는 것입니다. 그러면 웹 페이지에서 세션 ID를 사용하여 작업의 상태를 폴링하십시오. 물론 코드는 새 작업을 시작하기 전에 이미 실행중인 작업의 인스턴스가 없는지 확인해야합니다.

+0

+1. 답변 주셔서 감사합니다. – Karo

관련 문제