2013-12-23 7 views
0

Я изучаю Pig Latin, и мне хотелось бы узнать, как запустить скрипт свиньи с 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 (так что мой пользователь - apache), он не работает. Я попытался запустить скрипт свиньи напрямую или с помощью 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) 

Я не знаю, что делать, и я нужен этот скрипт, который очень производительный.

Спасибо, что прочитали это и, возможно, за вашу помощь! И счастливые праздники !!

Angélique

+2

Вы даже прочитали сообщение об ошибке? 'sudo: извините, у вас должно быть tty для запуска sudo' – devnull

+0

Да, но я начинаю в скрипте/shell/bash, я стараюсь изо всех сил, и я не понял, что может означать эта ошибка. – Angelik

+0

Это не столько о том, чтобы быть новичком, но, возможно, больше о _attempting_, чтобы решить проблему. Удачи. – devnull

ответ

1

Вы действительно не хотите быть запущен такого рода вещи, как корень.

Вы можете использовать SU для apache, используя su -s /bin/bash apache. Затем получить скрипт работает как пользователь апача, давая правильный доступ к журналам и т.д.

(Примечание: Ваш апач пользователь может быть WWW-данные или что-то другое вместо Apache, вы можете использовать ps aux | egrep '(apache|httpd)' проверить)

+0

Спасибо, я не понимал, что мой пользователь нуждается в доступе к журналам и что это может быть причиной, почему свинья не запускалась. Теперь, он работает, я даю право писать в каталоге, где есть журналы. Большое спасибо !! – Angelik

+0

Добро пожаловать. :) –

1

Сообщение об ошибке довольно толковое - вы не можете использовать Sudo в скрипте без терминала, как он ожидает, что пользователь ввести пароль.

Это может помочь использовать SUID бит вместо или «ожидать» команды (http://linux.die.net/man/1/expect), чтобы ввести пароль

+0

Спасибо, я не знал, что не могу, я решаю свою проблему. Я напомню эту команду, если мне это понадобится в один прекрасный день. – Angelik

Смежные вопросы