"PHP 배치 백그라운드 실행"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
 
(사용자 2명의 중간 판 7개는 보이지 않습니다)
6번째 줄: 6번째 줄:
;PHP 배치 백그라운드 실행
;PHP 배치 백그라운드 실행
*PHP 5.2.x 버전까지는 다음과 같이 [[CLI]]에서 php를 백그라운드로 실행할 수 있다.
*PHP 5.2.x 버전까지는 다음과 같이 [[CLI]]에서 php를 백그라운드로 실행할 수 있다.
<source lang='bash'>
<syntaxhighlight lang='bash'>
php 파일명.php &
php 파일명.php &
</source>
</syntaxhighlight>
*PHP 5.3.x 버전부터는 nohup을 이용해야만 php를 백그라운드로 실행할 수 있다. (물론 이전 버전도 가능)
*PHP 5.3.x 버전부터는 nohup을 이용해야만 php를 백그라운드로 실행할 수 있다. (물론 이전 버전도 가능)
<source lang='bash'>
<syntaxhighlight lang='bash'>
nohup php 파일명.php &
nohup php 파일명.php &
</source>
</syntaxhighlight>


==Foreground 실행==
==Foreground 실행==
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote02 ~]# cat test.php
[root@zetawiki02 ~]# cat test.php
<?php
<?php
$pid = getmypid();
$pid = getmypid();
24번째 줄: 24번째 줄:
}
}
echo "Process #$pid: done...\n";
echo "Process #$pid: done...\n";
</source>
</syntaxhighlight>
:→ 1초에 1번씩 메시지 출력하는 PHP 소스
:→ 1초에 1번씩 메시지 출력하는 PHP 소스


<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote02 ~]# php test.php
[root@zetawiki02 ~]# php test.php
Process #9897: i=0
Process #9897: i=0
Process #9897: i=1
Process #9897: i=1
Process #9897: i=2
Process #9897: i=2
Process #9897: done...
Process #9897: done...
</source>
</syntaxhighlight>
:→ 정상적으로 수행된다.
:→ 정상적으로 수행된다.


39번째 줄: 39번째 줄:
===PHP 5.2.x 가능===
===PHP 5.2.x 가능===
PHP 5.2.10에서 돌려보니 잘 된다.
PHP 5.2.10에서 돌려보니 잘 된다.
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote01 ~]# php test.php &
[root@zetawiki01 ~]# php test.php &
[1] 27991
[1] 27991
[root@jmnote01 ~]# php test.php &
[root@zetawiki01 ~]# php test.php &
[2] 27992
[2] 27992
[root@jmnote01 ~]# php test.php &
[root@zetawiki01 ~]# php test.php &
[3] 27993
[3] 27993
[root@jmnote01 ~]#  
[root@zetawiki01 ~]#  
[root@jmnote01 ~]#  
[root@zetawiki01 ~]#  
[root@jmnote01 ~]# Process #27991: i=0
[root@zetawiki01 ~]# Process #27991: i=0
Process #27992: i=0
Process #27992: i=0
Process #27993: i=0
Process #27993: i=0
64번째 줄: 64번째 줄:
[2]-  Done                    php test.php
[2]-  Done                    php test.php
[3]+  Done                    php test.php
[3]+  Done                    php test.php
[root@jmnote01 ~]#  
[root@zetawiki01 ~]#  
</source>
</syntaxhighlight>


===PHP 5.3.x 불가능===
===PHP 5.3.x 불가능===
PHP 5.3.3 에서는 백그라운드 실행이 제대로 안된다.
PHP 5.3.3 에서는 백그라운드 실행이 제대로 안된다.
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote02 ~]# php test.php &
[root@zetawiki02 ~]# php test.php &
[27] 9308
[27] 9308
[root@jmnote02 ~]# php test.php &
[root@zetawiki02 ~]# php test.php &
[28] 9309
[28] 9309
[root@jmnote02 ~]# php test.php &
[root@zetawiki02 ~]# php test.php &
[29] 9310
[29] 9310
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  


[27]  Stopped                php test.php
[27]  Stopped                php test.php
85번째 줄: 85번째 줄:


[29]+  Stopped                php test.php
[29]+  Stopped                php test.php
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  
</source>
</syntaxhighlight>
:→ 실행되지 않고 종료되어 버렸다.
:→ 실행되지 않고 종료되어 버렸다.


==nohup으로 백그라운드 실행 ★==
==nohup으로 백그라운드 실행 ★==
PHP 버전에 상관없이 잘 된다.
PHP 버전에 상관없이 잘 된다.
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote02 ~]# nohup php test.php &
[root@zetawiki02 ~]# nohup php test.php &
[30] 12884
[30] 12884
[root@jmnote02 ~]# nohup php test.php &
[root@zetawiki02 ~]# nohup php test.php &
[31] 12885
[31] 12885
nohup: ignoring input and appending output to `nohup.out'
nohup: ignoring input and appending output to `nohup.out'
[root@jmnote02 ~]# nohup php test.php &
[root@zetawiki02 ~]# nohup php test.php &
[32] 12886
[32] 12886
nohup: ignoring input and appending output to `nohup.out'
nohup: ignoring input and appending output to `nohup.out'
[root@jmnote02 ~]# nohup: ignoring input and appending output to `nohup.out'
[root@zetawiki02 ~]# nohup: ignoring input and appending output to `nohup.out'
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  
[30]  Done                    nohup php test.php
[30]  Done                    nohup php test.php
[31]  Done                    nohup php test.php
[31]  Done                    nohup php test.php
[32]  Done                    nohup php test.php
[32]  Done                    nohup php test.php
[root@jmnote02 ~]#  
[root@zetawiki02 ~]#  
[root@jmnote02 ~]# cat nohup.out
[root@zetawiki02 ~]# cat nohup.out
Process #12884: i=0
Process #12884: i=0
Process #12886: i=0
Process #12886: i=0
121번째 줄: 121번째 줄:
Process #12884: done...
Process #12884: done...
Process #12886: done...
Process #12886: done...
</source>
</syntaxhighlight>


==같이 보기==
==같이 보기==
*[[리눅스 스크립트 백그라운드 실행]]
*[[PHP 배치 작업]]
*[[PHP 배치 작업]]
*[[nohup]]
*[[nohup]]


==참고 자료==
==참고==
*https://bugs.php.net/bug.php?id=60185
*https://bugs.php.net/bug.php?id=60185
*http://stackoverflow.com/questions/6989161/running-php-script-from-command-line-as-background-process
*http://stackoverflow.com/questions/6989161/running-php-script-from-command-line-as-background-process


[[분류: PHP]]
[[분류: PHP]]

2020년 11월 2일 (월) 00:56 기준 최신판

1 개요[ | ]

How to send the process to background, In PHP CLI mode
Running PHP script from command line as background process
PHP 배치 백그라운드 실행
  • PHP 5.2.x 버전까지는 다음과 같이 CLI에서 php를 백그라운드로 실행할 수 있다.
php 파일명.php &
  • PHP 5.3.x 버전부터는 nohup을 이용해야만 php를 백그라운드로 실행할 수 있다. (물론 이전 버전도 가능)
nohup php 파일명.php &

2 Foreground 실행[ | ]

[root@zetawiki02 ~]# cat test.php
<?php
$pid = getmypid();
for($i=0;$i<3;$i++) {
  echo "Process #$pid: i=$i\n";
  sleep(1);
}
echo "Process #$pid: done...\n";
→ 1초에 1번씩 메시지 출력하는 PHP 소스
[root@zetawiki02 ~]# php test.php
Process #9897: i=0
Process #9897: i=1
Process #9897: i=2
Process #9897: done...
→ 정상적으로 수행된다.

3 nohup 없이 백그라운드 실행[ | ]

3.1 PHP 5.2.x 가능[ | ]

PHP 5.2.10에서 돌려보니 잘 된다.

[root@zetawiki01 ~]# php test.php &
[1] 27991
[root@zetawiki01 ~]# php test.php &
[2] 27992
[root@zetawiki01 ~]# php test.php &
[3] 27993
[root@zetawiki01 ~]# 
[root@zetawiki01 ~]# 
[root@zetawiki01 ~]# Process #27991: i=0
Process #27992: i=0
Process #27993: i=0
Process #27991: i=1
Process #27993: i=1
Process #27992: i=1
Process #27991: i=2
Process #27993: i=2
Process #27992: i=2
Process #27991: done...
Process #27993: done...
Process #27992: done...

[1]   Done                    php test.php
[2]-  Done                    php test.php
[3]+  Done                    php test.php
[root@zetawiki01 ~]#

3.2 PHP 5.3.x 불가능[ | ]

PHP 5.3.3 에서는 백그라운드 실행이 제대로 안된다.

[root@zetawiki02 ~]# php test.php &
[27] 9308
[root@zetawiki02 ~]# php test.php &
[28] 9309
[root@zetawiki02 ~]# php test.php &
[29] 9310
[root@zetawiki02 ~]# 
[root@zetawiki02 ~]# 
[root@zetawiki02 ~]# 

[27]   Stopped                 php test.php

[28]   Stopped                 php test.php

[29]+  Stopped                 php test.php
[root@zetawiki02 ~]#
→ 실행되지 않고 종료되어 버렸다.

4 nohup으로 백그라운드 실행 ★[ | ]

PHP 버전에 상관없이 잘 된다.

[root@zetawiki02 ~]# nohup php test.php &
[30] 12884
[root@zetawiki02 ~]# nohup php test.php &
[31] 12885
nohup: ignoring input and appending output to `nohup.out'
[root@zetawiki02 ~]# nohup php test.php &
[32] 12886
nohup: ignoring input and appending output to `nohup.out'
[root@zetawiki02 ~]# nohup: ignoring input and appending output to `nohup.out'
[root@zetawiki02 ~]# 
[root@zetawiki02 ~]# 
[root@zetawiki02 ~]# 
[30]   Done                    nohup php test.php
[31]   Done                    nohup php test.php
[32]   Done                    nohup php test.php
[root@zetawiki02 ~]# 
[root@zetawiki02 ~]# cat nohup.out
Process #12884: i=0
Process #12886: i=0
Process #12885: i=0
Process #12884: i=1
Process #12886: i=1
Process #12885: i=1
Process #12885: i=2
Process #12884: i=2
Process #12886: i=2
Process #12885: done...
Process #12884: done...
Process #12886: done...

5 같이 보기[ | ]

6 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}