Программа Linux, работающая на машине Ubuntu, но не на веб-сервере Unix

Инструмент Тонкой настройки Gnome позволяет Вам изменять это.

2
12.04.2012, 02:49
3 ответа

При выполнении чего-либо как побега оболочки из веб-сервера или любой другой программы, параметры среды, довольно вероятно, не становятся прикладными. Например, переменные как: PATH, LD_LIBRARY_PATH, и т.д. имейте их настройки по умолчанию или никакие настройки вообще поэтому при выполнении Escape оболочки, необходимо, по крайней мере, сделать следующее:

  • Назовите программу полным путем: например. /usr/local/bin/gnatmake или /usr/local/bin/words
  • получите вывод /usr/bin/env удостоверяться, что в Escape оболочки это имеет надлежащие настройки. Проверьте те же настройки в свою терминальную оболочку.
  • Если Вы имеете контроль над попыткой веб-сервера заставить его выполниться как Ваш UID для предотвращения проблем полномочий.
  • Проверьте, какие библиотеки требуются для программы если любой ldd /usr/local/bin/words

ДОПОЛНИТЕЛЬНАЯ ВОЗМОЖНОСТЬ

Вместо того, чтобы выполнить программу непосредственно используют следующий сценарий:

#!/bin/sh
. /etc/profile

/usr/bin/env
pwd
./words 2>&1

и отправьте вывод. Это скажет Вам, если программа выполнится и если она отказывает.

Еще одна вещь проверить состоит в том действительно ли пользователь www-data или независимо от того, что работает ./words способно к доступу к базе данных это ./words потребности если таковые имеются.

3
27.01.2020, 21:55
  • 1
    ! Выполнение /usr/bin/env resultet в APACHE_PID_FILE=/var/run/apache2.pid APACHE_RUN_USER=www-data MONIT_DATE=... MONIT_HOST=... PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin PDFLIBLICENSEFILE=/etc/pdflib/pdflib_licence _=/usr/bin/env PWD=... APACHE_RUN_GROUP=www-data MONIT_PROCESS_PID=0 MONIT_EVENT=Started MONIT_PROCESS_MEMORY=0 SHLVL=4 MONIT_PROCESS_CPU_PERCENT=0 MONIT_SERVICE=apache2 MONIT_PROCESS_CHILDREN=0 MONIT_DESCRIPTION=failed, cannot open a connection to INET[...] via TCP. Полный путь ничего не изменил. ldd посмотрите вопрос выше. –  caw 05.04.2012, 02:31
  • 2
    PWD был /is/htdocs/www/words между прочим, если это важно. –  caw 05.04.2012, 02:33
  • 3
    @MarcoW. Где words программа? –  Karlson 10.04.2012, 00:14
  • 4
    Сценарий PHP находится в / и программа words находится в /words/. Это - путь это PWD возвращенный также. Конечно, я сделал chdir('words') в PHP для изменения каталога. –  caw 10.04.2012, 03:24
  • 5
    @MarcoW. Нет. Вы делаете: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<PATH_WHERE_GNAT_LIBRARY_IS> –  Karlson 13.04.2012, 00:11

Попытайтесь запустить не саму программу, но сценарий, запускающий эту программу, и регистрирующийся это - вывод STDERR и среда.

Также необходимо было посмотреть в журналы веб-сервера.

2
27.01.2020, 21:55
  • 1
    Спасибо за эти предложения! В файле журнала моего веб-сервера нет никакой записи, которая принадлежит программе. Только вызов файла PHP упоминается. И в файле регистрации ошибок, нет ничего, что принадлежит моей программе также. Когда я создал сценарий Python с #!/usr/bin/python print "Hello World\n" import os; os.system("./words"); и названный им через PHP, он привел точно к тем же результатам как вызов программы Linux непосредственно в PHP. –  caw 09.04.2012, 02:21
  • 2
    @MarcoW. Так ожидаемый "Привет Мир" из Python не работал также? Возможно, Ваш webhost отключил должностное лицо? –  ephemient 09.04.2012, 05:31
  • 3
    Ура не проверил os.system выполнения хорошо. Вам нужно больше многословия для решения вопроса, друг. –  poige 09.04.2012, 07:17
  • 4
    @ephemient: Извините, "Привет Мир" действительно работал. Я просто обращался к выводу программы Linux. Таким образом, у меня были "Привет Мир" и затем никакой вывод из программы Linux. @poige: К сожалению, я не знаю Python, таким образом, я не знаю, как проверить если os.system работы правильно. Я просто думал, что должен был использовать Python или некоторый другой язык сценариев, отличающийся от PHP. –  caw 09.04.2012, 14:13
  • 5
    Что-то вроде этого: codetidy.com/2467 –  poige 09.04.2012, 14:28

мм... Я - суперновичок в программировании, но... возможно, компиляции программы в веб-сервере? Или сделайте виртуальную машину с той же конфигурацией, что Вы работаете на веб-сервере, для компиляции кода там.

Поскольку каждый - x86, и другой i686, правильно?

1
27.01.2020, 21:55
  • 1
    Да, это было бы самым легким решением :D Спасибо, в большинстве случаев это работало бы, я уверен. Но на моем веб-сервере (совместно использованный хостинг), GNAT/GCC не доступен, поскольку это не нужно на веб-серверах в большинстве случаев. И у меня нет возможности установить его. Таким образом, я должен скомпилировать программу в другом месте. К сожалению. –  caw 12.04.2012, 02:51
  • 2
    hmmmm.. если Вы действительно не можете установить gcc в веб-сервер, возможно, лучшее решение состоит в том, чтобы моделировать это: создайте виртуальную машину на своей машине компилятора с подобной конфигурацией, которую Вы используете на веб-сервере, затем компилируете код в виртуальной машине... просто мои 2 бита... –  H_7 12.04.2012, 02:54
  • 3
    , я - новичок, но я очень стараюсь. =P –  H_7 12.04.2012, 02:56
  • 4
    Да, это - то, что я только что сделал. Посмотрите обновление в моем вопросе выше. Но это не работало, также. Поскольку, кажется, существует отсутствие файла (SIGSEV - отказ сегментации?). Действительно ли это - причина? –  caw 12.04.2012, 03:01
  • 5
    у меня есть GNAT 3.4, но GCC 4.0 - правильно. Я не знаю, вызывает ли это проблему. Спасибо, так или иначе! –  caw 12.04.2012, 03:14

Теги

Похожие вопросы