2012-08-25 2 views
0

은 내가 (PHP에서) 코딩을하고있어 사이트에 대한 (한 번만 행동에 대한) 스케줄러를해야하고, 나는이 개 아이디어가 있었다 : crontab을 함께Linux "at"명령을/bin/sh 이외의 환경에서 실행할 수 있습니까?

1 실행 PHP 스크립트를 및 예약의 데이터베이스에 대해 확인 현재 시간보다 오래된 액션을 실행합니다.

2 "at"명령으로 다양한 작업을 예약하십시오.

두 번째 옵션이 훨씬 더 간단하고 단순 해 보입니다. 그래서 이것이 내가하려는 것입니다. 그러나, 나는 "at"에게 PHP 인터프리터를 사용하여 명령을 실행하는 방법을 찾지 못했습니다. 그리고 지금까지는 .sh 스크립트를 작성했습니다.이 명령에는 단일 명령이 포함되어 있습니다. PHP 인터프리터. 즉 지금까지 최적의 설정에서, 그리고 난 그냥 "에서"직접을 통해 PHP 코드를 실행할 수 같은 것을 할 :

at -e php -f /path/to/phpscript time 

이 가능를? 나는 사람이나 온라인에서 bash 이외의 다른 환경을 사용하는 것에 대해서는 아무 것도 발견하지 못했다.

+0

"echo 'php -f/path/to/phpscript'| at time"과 같은 의미입니까? – jhfrontz

답변

2

phpscript 앞에 #!/usr/bin/php (또는 PHP 스크립트가 저장된 곳)을 붙이고 /path/to/phpscript을 실행 가능하게 만들 수 있습니다. 이것은 정확하게 #! 구문을위한 것입니다. 당신이 at로 지정

#!/usr/bin/php 

...your code goes here 
+0

시도했지만 작동하지 않았다. ./phpscript를 사용하여 터미널에서 스크립트를 실행할 수 있지만 at 명령은 여전히 ​​/ bin/sh를 사용하여 실행중인 것으로 보입니다. – drakenation

+0

'at' 명령 파일에'PATH'를 명시 적으로 설정해야합니다. –

0

명령은 /bin/sh에 의해 실행되지만, 쉬 직접 또는 지정된 인터프리터에 의해 실행되는 모든 명령을 호출 할 수 있습니다

은 분명 그냥, 그래서 당신의 phpscript은 다음과 같이 보일 것이다.

bash 쉘 내 우분투 12.04 시스템에서 다음 작품

: 어떤 경우에는

$ cat hello.php 
#!/usr/bin/php 
<?php 
    echo "Hello, PHP\n"; 
?> 
$ echo "$PWD/hello.php > hello.php.out" | at 16:11 
warning: commands will be executed using /bin/sh 
job 4 at Sat Aug 25 16:11:00 2012 
$ date 
Sat Aug 25 16:11:05 PDT 2012 
$ cat hello.php.out 
Hello, PHP 
$ 

, 당신은 제대로 환경 변수를 설정하는 몇 가지 추가 작업을해야 할 것이다 (이것은이 간단한 경우에 필요는 없습니다). 맨 페이지 인용 : 및 배치에서 모두 를 들어

을, 명령은 표준 입력에서 읽거나 파일은 -f 옵션으로 지정하고 실행됩니다. 작업 디렉토리 환경 (변수 이외 BASH_VERSINFO, DISPLAY, EUID, GROUPS, SHELLOPTS, TERM, UID_)과의 umask은 호출 시간부터 을 유지했습니다.에서 로서

현재 다른 환경을하는 프로그램이 setuid로 변수 (예컨대 LD_LIBRARY_PATH 또는 LD_PRELOAD) 또한 반출되지 구현된다. 이것은 앞으로 변경 될 수 있습니다. 이 문제를 해결하려면 이러한 변수를 작업에 명시 적으로 설정하십시오.