Intereting Posts
Как устранить ошибку « file_get_contents (/var/www/laravel/.env): не удалось открыть поток: нет такого файла или каталога»? Ошибка анализа: синтаксическая ошибка, неожиданные '.', Ожидающие ',' или ';' Инструменты для проверки / отладки / устранения проблем параллелизма PHP? Обертывание 3 объектов или менее внутри / в foreach в PHP Закрытие PHP как необязательный аргумент функции Функция mime_content_type () не работает Является ли временная метка в микросекундах всегда уникальной? PHP: проблема с strtotime Как определить, является ли строка действительной JSON? mysql_real_escape_string не определено Разница между уровнем доступа к данным и моделью в MVC скрыть и показать div нажмите на кнопку Facebook публиковать поток напрямую с помощью PHP WordPress Получение данных для Post Grid визуального композитора Как распечатать страницу в PHP для печати с использованием принтера, аналогичного работе с окном.print ()

Системы на базе Debian Сессия убита через 30 минут в специальном cron, как переопределить?

Вытаскивали мои волосы, пытаясь выяснить, почему мои сеансы прекращаются / убиваются / уничтожаются через 30 минут. Похоже, системы на базе Debian имеют специальный запуск cron, который игнорирует все конфигурации php.ini и apache и убивает любой простой сеанс через 30 минут.

Путь cron: /etc/cron.d/php5

Внутри cron:

 # /etc/cron.d/php5: crontab fragment for php5 # This purges session files older than X, where X is defined in seconds # as the largest value of session.gc_maxlifetime from all your php.ini # files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime # Look for and purge old sessions every 30 minutes 09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm 

Я не плохо настраиваю и настраиваю хосты, но я не sysAdmin. Может кто-то, пожалуйста, помогите мне переопределить / изменить / изменить / переконфигурировать это, чтобы я мог установить значение дольше? Я думаю, что 3 часа были бы хорошими, но я хотел бы понять изменения, поэтому, если кто-то выше хочет сделать сеанс короче / длиннее, я документирую, как настроить изменение.

Благодаря любой помощи в этом вопросе

EDIT: добавление кода / usr / lib / php5 / maxlifetime

 #!/bin/sh -e max=1440 for ini in /etc/php5/*/php.ini; do cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true); [ -z "$cur" ] && cur=0 [ "$cur" -gt "$max" ] && max=$cur done echo $(($max/60)) exit 0 

поэтому он ищет все файлы php.ini, находит наибольшее значение, сравнивает его с 1440 (что составляет 24 минуты).

Вот файлы php.ini

 /etc/php5/apache2/php.ini session.gc_maxlifetime = 1440 /etc/php5/cgi/php.ini session.gc_maxlifetime = 1440 /etc/php5/cli/php.ini session.gc_maxlifetime = 1440 

но почему мой сеанс скрипта будет убит через 30 минут, а не 24 минуты?

EDIT # 2: CRON работает каждые 30 минут, поэтому сеанс выглядит убитым с 30-минутными интервалами. Но это также может быть от 24 до 54 минут, FYI

Также просматривая код в: /usr/lib/php5/maxlifetime он принимает самое высокое значение, и во время моего тестирования я пытался снизить порог, чтобы ускорить условие.

Похоже, мне просто нужно увеличить один файл php.ini до тестового теста за один час.

Отредактируйте файл /usr/lib/php5/maxlifetime

Значение должно быть в секундах. Этот файл также будет проверять ваш php.ini, поэтому я не знаю, почему он не работает для вас.

Это вопрос для serverfault.com.

Однако измените session.gc_maxlifetime в /etc/php5/apache2/php.ini или – если у вас нет apache2 один – один из других файлов /etc/php5/*/php.ini . Затем сценарий /usr/lib/php5/maxlifetime будет использовать максимум для этого параметра, найденного в любом из этих файлов.

Редактирование maxlifetime не поможет или, по крайней мере, только до тех пор, пока php5-common пакет php5-common будет обновлен повторно.

Вы можете предоставить свой собственный путь сеанса session.save_path или использовать другой обработчик в целом session.save_handler

Однако вам необходимо предоставить соответствующий механизм для управления нежелательными файлами сеансов.

Нашел это в моем php.ini

  ;  ПРИМЕЧАНИЕ. Если вы используете опцию подкаталога для хранения файлов сеанса
 ;  (см. session.save_path выше), то сборка мусора делает * not *
 ;  происходят автоматически.  Вам нужно будет сделать свой собственный мусор
 ;  сбор через скрипт оболочки, запись cron или какой-либо другой метод.
 ;  Например, следующий сценарий будет эквивалентен
 ;  установка session.gc_maxlifetime до 1440 (1440 секунд = 24 минуты):
 ;  cd / path / to / sessions;  найти -cmin +24 |  xargs rm 

Недавно я столкнулся с этой проблемой, когда ненужные файлы сеансов накапливались, потому что я использовал PHP и mod_fcgid с пользовательским session.save_path для каждого виртуального хоста.

Он находится прямо в вашем фрагменте php5 cronjob:

Ищите и очищайте старые сеансы каждые 30 минут

Не имеет значения, скрипт очищает 24-минутные сеансы, если скрипт не выполняется больше, чем каждые 30 минут 🙂

Если вы пришли сюда, потому что ваш cron бросает ошибки каждые 30 минут (в 09 и 39), у вас могут быть похожие ошибки в вашем syslog и / или почтовом ящике:

 [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm PHP Fatal error: Directive 'allow_call_time_pass_reference' is no longer available in PHP in Unknown on line 0 

Причиной этого может быть то, что вы upgraded your Debian to Wheezy и у вас есть старые записи в вашем /etc/php5/apache2/php.ini .

Мне пришлось прокомментировать следующие строки, и ошибки исчезли.

  • allow_call_time_pass_reference
  • register_long_arrays

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

PS: Это очень помогло мне: http://vernontbludgeon.com/blog/archives/2013/10/debian-php-session-garbage-collection-maxlifetime-fails-when-php.ini-has-obsolete-directives. HTML

Используйте ниже cron для удаления неиспользуемых сеансов.

39 20 * * * root [-x / usr / lib / php5 / maxlifetime] && [-d / var / lib / php5] && find / var / lib / php5 / -depth -mindepth 1 -maxdepth 1-type f – cmin + $ (/ usr / lib / php5 / maxlifetime) -print0 | xargs -r -0 rm