2013-12-23 4 views
0

나는 돼지 라틴어를 배우기 때문에 PHP로 돼지 스크립트를 시작하는 법을 알고 싶다.PHP로 돼지 스크립트 시작하기

이 스크립트 실행에 대한 내 라인입니다

: 나는 내 쉘에서 실행할 수 있습니다 (내가 루트 해요)하고 작동하는 스크립트가

pig -f ../testjava/calculs_routage.pig -param input=/user/hive/warehouse/tableRoutage/ -param output=/resultatsRequetes/obj1/resultatObj1 -param date1=2013-11-08T00:00:00.000Z -param date2=2013-11-15T00:00:00.000Z 

, 나는 떠들썩한 내 돼지 스크립트를 실행하려고 , 그리고 그것도 작동합니다.

하지만 내 PHP 응용 프로그램을 사용하려고하면 (내 사용자가 아파치이기 때문에) 작동하지 않습니다. 돼지 스크립트를 직접 또는 bash로 시작하려했지만 실패했습니다. 이것은 스크립트를 시작하기위한 제 행입니다.

$cmdTest = exec('pig -f ../testjava/calculs_routage.pig -param input=/user/hive/warehouse/tableRoutage/ -param output=/resultatsRequetes/obj1/resultatObj1 -param date1=2013-11-08T00:00:00.000Z -param date2=2013-11-15T00:00:00.000Z 2>&1'); 

sudo로 사용자 변경을 시도했지만 실패했습니다.

배쉬 스크립트 :

#!/bin/bash 
sudo -s -u root 

pig -f ../testjava/calculs_routage.pig -param input=/user/hive/warehouse/tableRoutage/ -param output=/resultatsRequetes/obj1/resultatObj1 -param date1=2013-11-08T00:00:00.000Z -param date2=2013-11-15T00:00:00.000Z 

, 그것은 사용자 또는 로그 파일로 오류 발생 probleme 인 위치를 모르겠어요? log4j 속성에서 로그 파일의 경로를 변경하려고했지만 아무 것도 변경하지 않습니다.

내 오류 메시지 :

sudo: sorry, you must have a tty to run sudo 
13/12/23 14:16:35 WARN pig.Main: Cannot write to log file: /var/www/html/phpmail/vue/pig_1387804595477.log 
2013-12-23 14:16:35,481 [main] INFO org.apache.pig.Main - Apache Pig version 0.11.1-Intel (r16951) compiled Jun 19 2013, 17:26:05 
2013-12-23 14:16:35,734 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /var/www/.pigbootup not found 
2013-12-23 14:16:35,752 [main] WARN org.apache.pig.Main - Cannot write to log file: /var/www/html/phpmail/vue//calculs_routage.pig1387804595751.log 
2013-12-23 14:16:35,767 [main] ERROR org.apache.pig.Main - ERROR 2999: Unexpected internal error. null 
2013-12-23 14:16:35,767 [main] WARN org.apache.pig.Main - There is no log file to write to. 
2013-12-23 14:16:35,767 [main] ERROR org.apache.pig.Main - java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:394) 
at java.util.Properties.setProperty(Properties.java:143) 
at org.apache.pig.Main.run(Main.java:454) at org.apache.pig.Main.main(Main.java:157) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:187) 

내가 무엇을 해야할지하지 않으며, 내가 아주 성능이 좋은 것입니다이 스크립트가 필요합니다.

이 도움말을 읽고 도움을 주셔서 감사합니다. 해피 홀리데이!

안젤리크

+2

오류 메시지를 읽었습니까? 'sudo : 미안 해요. sudo를 실행하려면 tty가 있어야합니다. ' – devnull

+0

예.하지만 스크립트/셸/bash에서 초보자인데, 최선을 다하려하지만이 오류의 의미를 이해하지 못했습니다. – Angelik

+0

초보자가되는 것이 아니라 문제를 해결하는 데 더 많은 도움이 될 것입니다. 행운을 빕니다. – devnull

답변

1

당신은 정말 루트로 사물의 이러한 종류를 실행하고 싶지 않아요.

su -s /bin/bash apache을 사용하여 SU에 아파치를 연결할 수 있습니다. 그런 다음 로그에 올바른 액세스 권한을 부여하여 스크립트를 Apache 사용자로 설정하십시오.

(참고 : apache 사용자는 www-data 또는 Apache 대신 ps aux | egrep '(apache|httpd)'을 사용할 수 있습니다)

+0

감사합니다. 내 사용자가 로그에 액세스해야하고 돼지가 실행되지 않은 이유가 될 수 있다는 것을 알지 못했습니다. 이제 작동합니다. 로그가있는 디렉토리에 쓸 수있는 권한을 부여합니다. 대단히 감사합니다 !! – Angelik

+0

여러분을 환영합니다. :) –

1

오류 메시지는 매우 설명 - 그것은 사용자가 암호를 입력 할 것으로 예상대로 터미널없이 쉘 스크립트에서 sudo를 사용할 수 없습니다. 그것은 암호를 제공 명령 (http://linux.die.net/man/1/expect)를 "기대"대신 SUID 비트를 사용하거나하는 데 도움이 될 수 있습니다

+0

고마워요. 나는 할 수 없다는 것을 몰랐고, 제 문제를 해결했습니다. 나는 언젠가 그것을 필요로한다면이 명령을 생각 나게 할 것이다. – Angelik