OTOBO исправление проверки работы Daemon
Изменения в файле /opt/otobo/Kernel/Output/HTML/Notification/DaemonCheck.pm Следующие изменения были внесены в файл /opt/otobo/Kernel/Output/HTML/Notification/DaemonCheck.pm для проверки реального статуса демона OTOBO вместо использования кеша DaemonRunning.
Содержание
Исходный код (использовал кеш DaemonRunning)
perlCopy code1# ... 2 3package Kernel::Output::HTML::Notification::DaemonCheck; 4 5use parent 'Kernel::Output::HTML::Base'; 6 7use strict; 8use warnings; 9 10use Kernel::System::VariableCheck qw(:all); 11 12our @ObjectDependencies = ( 13 'Kernel::Config', 14 'Kernel::Output::HTML::Layout', 15 'Kernel::System::Cache', 16 'Kernel::System::Group', 17); 18 19sub Run { 20 my ( $Self, %Param ) = @_; 21 22 # get config object 23 my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); 24 25 # get the NodeID from the SysConfig settings, this is used on High Availability systems. 26 my $NodeID = $ConfigObject->Get('NodeID') || 1; 27 28 # get running daemon cache 29 my $Running = $Kernel::OM->Get('Kernel::System::Cache')->Get( 30 Type => 'DaemonRunning', 31 Key => $NodeID, 32 ); 33 34 return if $Running; 35 36 # get layout object 37 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 38 39 my %NotificationDetails = ( 40 Priority => 'Error', 41 Data => $LayoutObject->{LanguageObject}->Translate("OTOBO Daemon is not running."), 42 ); 43 44 # ... (остальная часть кода) 45} 46 471; 48
Измененный код (использует PID-файл для проверки)
perlCopy code1# -- 2# OTOBO is a web-based ticketing system for service organisations. 3# -- 4# Copyright (C) 2001-2020 OTRS AG, https://otrs.com/ 5# Copyright (C) 2019-2024 Rother OSS GmbH, https://otobo.io/ 6# -- 7# This program is free software: you can redistribute it and/or modify it under 8# the terms of the GNU General Public License as published by the Free Software 9# Foundation, either version 3 of the License, or (at your option) any later version. 10# This program is distributed in the hope that it will be useful, but WITHOUT 11# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 12# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <https://www.gnu.org/licenses/>. 15# -- 16 17package Kernel::Output::HTML::Notification::DaemonCheck; 18 19use parent 'Kernel::Output::HTML::Base'; 20 21use strict; 22use warnings; 23 24use Kernel::System::VariableCheck qw(:all); 25use File::Exists qw( -e ); # Добавляем модуль для проверки существования файла 26 27our @ObjectDependencies = ( 28 'Kernel::Config', 29 'Kernel::Output::HTML::Layout', 30 'Kernel::System::Cache', 31 'Kernel::System::Group', 32); 33 34sub Run { 35 my ( $Self, %Param ) = @_; 36 37 # get config object 38 my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); 39 40 # get layout object 41 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 42 43 # Get the PID file path from the configuration 44 my $PIDFile = $ConfigObject->Get('Daemon::PID::Path'); 45 46 # Check if the PID file exists 47 if ( -e $PIDFile ) { 48 # Read the PID from the file 49 my $PID = `cat $PIDFile 2>/dev/null`; 50 chomp($PID); 51 52 # Check if the process is running 53 if ( $PID && kill 0, $PID ) { 54 # Daemon is running 55 return ; # Don't show any notification 56 } 57 } 58 59 # Daemon is not running or PID file does not exist 60 my %NotificationDetails = ( 61 Priority => 'Error', 62 Data => $LayoutObject->{LanguageObject}->Translate("OTOBO Daemon is not running."), 63 ); 64 65 # ... (остальная часть кода) 66} 67 681; 69
Подробное описание изменений
Добавлен модуль File::Exists: use File::Exists qw( -e ); Этот модуль предоставляет функцию -e, которая позволяет проверить, существует ли файл.
Изменена логика проверки статуса демона в методе Run:
Вместо использования кеша DaemonRunning, код теперь выполняет следующие действия:
Получает путь к PID-файлу из конфигурации:
my $PIDFile = $ConfigObject->Get('Daemon::PID::Path');
Эта строка получает значение переменной Daemon::PID::Path из конфигурации OTOBO. Эта переменная должна содержать полный путь к PID-файлу демона.
Проверяет, существует ли PID-файл:
if ( -e $PIDFile ) { # ... }
Эта строка проверяет, существует ли файл, указанный в $PIDFile. Если файл не существует, это означает, что демон, скорее всего, не запущен.
Читает PID из файла:
my $PID = cat $PIDFile 2>/dev/null`; chomp($PID);** Если PID-файл существует, эта строка читает содержимое файла (PID процесса) и удаляет символ новой строки (chomp). 2>/dev/nullперенаправляет ошибки (если командаcatне может прочитать файл) в/dev/null, чтобы они не отображались в логах. **Проверяет, запущен ли процесс с указанным PID:** **if ( PID && kill 0, PID ) { # ... }** Эта строка проверяет, запущен ли процесс с PID, который был прочитан из файла. kill 0, $PIDне отправляет сигнал процессу, а только проверяет, существует ли процесс с указанным PID. Если процесс существует, это означает, что демон запущен, и функцияRun возвращает пустую строку, чтобы не отображать уведомление об ошибке. **Отображает уведомление, если демон не запущен:** Если PID-файл не существует или процесс с указанным PID не запущен, код переходит к созданию и отображению уведомления об ошибке: **my %NotificationDetails = ( # ... );`
Краткое описание изменений
Основное изменение заключается в том, что вместо проверки кеша DaemonRunning код теперь проверяет реальное состояние демона, анализируя PID-файл и проверяя, запущен ли процесс с указанным PID. Это обеспечивает более точное и надежное определение статуса демона.