linux — PHP команда ‘exec’ не работает должным образом с командой ‘awk’

Я использую следующий код PHP:

<?php
exec ("awk -F'|' -vOFS='|' '(NR==FNR){a[$1]=$0; next}{if(a[$1]){print $2,a[$1]}}' /var/log/apache2/forensic_log.log /var/log/apache2/access.log | cut -d'|' -f1,3- > i/content/other/LOG_FILE.log");
?>

Он сравнивается с файлами журнала, объединяет содержимое, если идентификаторы журнала совпадают, и выводит его в файл LOG_FILE.log. В результате у меня должно быть что-то похожее в LOG_FILE.log

[14/May/2018:06:37:07 +0300]|HEAD /favicon.ico HTTP/1.0|Host:host.com|Connection:close

Этот код работал хорошо в течение длительного времени, но теперь кажется, что он где-то не работает, потому что LOG_FILE.log пуст.

  1. Я проверил пути, упомянутые в скрипте — они правильные.
  2. Пробовал скрипт локально с использованием обоих файлов журнала — он работает и выдает ожидаемый вывод в LOG_FILE.log
  3. Кажется, проблема возникла, когда мы обновили apache2 до Apache / 2.4.34.
  4. Добавление разрешений на файлы:
    LOG_FILE.log — 777
    Файл, в котором выполняется код PHP — 664
    access.log — 640
    forensic_log.log — 640

Добавление упрощенного кода:

<?php
$output=exec("awk -F'|' -vOFS='|' '(NR==FNR){a[$1]=$0; next}{if(a[$1]){print $2,a[$1]}}' /var/log/apache2/forensic_log.log /var/log/apache2/access.log");
echo $output;
?>

Этот код ничего не повторяет.

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

0

Решение

Я наконец нашел причину проблемы и решил ее. Проблема не связана с командой ‘awk’, извините за это. Проблема была в разрешениях для файлов журнала apache, как только я исправил это, исходный код начал давать ожидаемый результат.

Спасибо всем за ваши предложения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector