Хорошо, здесь у нас есть проблема: что-то работает в терминал и не работает в php shell_exec (или exec, spawn и т. д.). Давайте подумаем: в чем разница между You и php? Вот три:
PHP выполняется из правил HTTP-сервера
Действительно, ваш терминал запущен от пользователя ваше имя
, а php выполняется из www-data
.Итак, первая идея - открыть терминал пользователя www-data
и попробовать ту же команду. Итак ....
/ etc / passwd
, найдите строку с пользователем www-data
и измените оболочку входа (последнюю) с / bin / false
(или что-то еще) в / bin / bash
. www-data
: su www-data
/ etc / passwd
файл, пока все готово PHP выполняется из PHP .
PHP - это параноик, и в конфигурации apache / nginx и php.ini есть множество опций, которые могут помешать вашей попытке.
Это немного сложнее отладить. Здесь есть два варианта:
Включить журналы в браузере и увидеть проблему. Отредактируйте свой php.ini
, включите display_errors
и все другие флаги, чтобы видеть ошибки в браузере. Их можно читать и отлаживать.
Получите оболочку www-data
(см. Первый раздел) и выполните что-то вроде
echo ' Php shell_exec ("php -v"); ?> '| php
, который выполнит тот же код php в консоли, и вы сможете видеть ошибки и отлаживать.
PHP выполняется из SELinux / apparmor
Selinux и apparmor - это средства безопасности, которые запрещают приложениям выполнять определенные действия (например, запускать другие приложения или некоторые другие приложения). Возможно, он включен на вашем сервере.
Для проверки - отключите selinux / apparmor и проверьте, существует ли проблема.
Чтобы исправить - прочтите соответствующее руководство и исправьте разрешающие запись для Вашего случая.
Вы можете попробовать это
awk -vStartDate=`date -d'now-30 min' +%H:%M:%S` '{ if ($2 > StartDate) print $0}' web.log
Вы можете печатать строки на основе флага, который устанавливается, только если первое поле является полем даты. см. следующий код с флагом p
, чтобы указать awk печатать (, когда p==1
), или пропускать (, когдаp==0
)строка
awk -v tstart="$start" -v tend="$end" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2}/ {
t = $1 " " $2
p = t >= tstart && t <= tend ? 1 : 0
}p' webservice_logs.log
Поскольку в начале строк ERROR нет метки времени, в таких строках не происходит изменения флага.
Правка В одной строке:
awk -v tstart="$start" -v tend="$end" '/^[0-9]{4}-[0-9]{2}-[0-9]{2}/{t = $1 " " substr($2,1,5); p = t >= tstart && t <= tend ? 1 : 0}p' webservice_logs.log