From 4ec880f36ac90b5919e1e12b06fc81eb7508a239 Mon Sep 17 00:00:00 2001 From: Webslice Date: Mon, 14 Jan 2019 20:16:44 +0100 Subject: [PATCH 1/5] Add incron_plugin, fixes #5218 --- .../plugins-available/incron_plugin.inc.php | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 server/plugins-available/incron_plugin.inc.php diff --git a/server/plugins-available/incron_plugin.inc.php b/server/plugins-available/incron_plugin.inc.php new file mode 100644 index 0000000000..eddcee169a --- /dev/null +++ b/server/plugins-available/incron_plugin.inc.php @@ -0,0 +1,162 @@ +isIncronAvailable() === false) { + return false; + } + + return true; + } + + function onLoad() { + global $app; + + $app->plugins->registerEvent('web_domain_insert', $this->plugin_name, 'incronInsert'); + $app->plugins->registerEvent('web_domain_update', $this->plugin_name, 'incronUpdate'); + $app->plugins->registerEvent('web_domain_delete', $this->plugin_name, 'incronDelete'); + } + + function incronInsert($eventName, $data) { + $this->setup($data['new']); + } + + function incronUpdate($eventName, $data) { + global $app; + + if ($data['new']['document_root'] === $data['old']['document_root']) { + $app->log('Document root unchanged. Not updating incron configuration.', LOGLEVEL_DEBUG); + + return; + } + + $this->teardown($data['old']); + $this->setup($data['new']); + } + + function incronDelete($eventName, $data) { + $this->teardown($data['old']); + } + + private function setup($data) + { + $triggerFile = $this->getTriggerFilePath($data['document_root']); + + $this->createTriggerFile($triggerFile, $data['system_user'], $data['system_group']); + $this->createIncronConfiguration( + $triggerFile, + $data['system_user'], + $data['fastcgi_php_version'] + ); + + $this->restartIncronService(); + } + + private function teardown($data) { + $this->deleteIncronConfiguration($data['system_user']); + $this->deleteTriggerFile($this->getTriggerFilePath($data['document_root'])); + + $file = sprintf('/etc/incron.d/%s.conf', $data['system_user']); + + @unlink($file); + + $this->restartIncronService(); + } + + private function isIncronAvailable() { + exec('which incrond', $output, $retval); + + return $retval === 0; + } + + private function createIncronConfiguration($triggerFile, $systemUser, $fastcgiPhpVersion) { + global $app; + + $phpService = $this->getPhpService($fastcgiPhpVersion); + $configFile = $this->getIncronConfigurationFilePath($systemUser); + + $content = sprintf( + '%s %s %s', + $triggerFile, + 'IN_CLOSE_WRITE', + $app->system->getinitcommand($phpService, 'reload') + ); + + file_put_contents($configFile, $content); + + $app->log(sprintf('Created incron configuration "%s"', $configFile), LOGLEVEL_DEBUG); + } + + private function createTriggerFile($triggerFile, $systemUser, $systemGroup) { + global $app; + + if (!file_exists($triggerFile)) { + exec(sprintf('touch %s', $triggerFile)); + } + + exec(sprintf('chown %s:%s %s', $systemUser, $systemGroup, $triggerFile)); + + $app->log(sprintf('Ensured incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG); + } + + private function deleteIncronConfiguration($systemUser) { + global $app; + + $configFile = $this->getIncronConfigurationFilePath($systemUser); + unlink($configFile); + + $app->log(sprintf('Deleted incron configuration "%s"', $configFile), LOGLEVEL_DEBUG); + } + + private function deleteTriggerFile($triggerFile) { + global $app; + + unlink($triggerFile); + + $app->log(sprintf('Deleted incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG); + } + + private function getTriggerFilePath($documentRoot) { + return sprintf('%s/private/php-fpm.reload', $documentRoot); + } + + private function getIncronConfigurationFilePath($systemUser) { + return sprintf('/etc/incron.d/%s.conf', $systemUser); + } + + private function getPhpService($fastcgiPhpVersion) { + $phpInfo = explode(':', $fastcgiPhpVersion); + if (empty($phpInfo)) { + return null; + } + + $phpService = $phpInfo[1]; + if (empty($phpService)) { + return null; + } + + return $phpService; + } + + private function restartIncronService() { + global $app; + + exec($app->system->getinitcommand('incrond', 'restart')); + } +} \ No newline at end of file -- GitLab From af92be13d2b217a728205b8d7c1e12a20103ede6 Mon Sep 17 00:00:00 2001 From: Webslice Date: Mon, 4 Feb 2019 11:22:33 +0100 Subject: [PATCH 2/5] #5218 set chattr +i on trigger file --- server/plugins-available/incron_plugin.inc.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/plugins-available/incron_plugin.inc.php b/server/plugins-available/incron_plugin.inc.php index eddcee169a..f072a850b6 100644 --- a/server/plugins-available/incron_plugin.inc.php +++ b/server/plugins-available/incron_plugin.inc.php @@ -111,6 +111,7 @@ class incron_plugin { } exec(sprintf('chown %s:%s %s', $systemUser, $systemGroup, $triggerFile)); + exec(sprintf('chattr +i %s', $triggerFile)); $app->log(sprintf('Ensured incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG); } @@ -127,6 +128,7 @@ class incron_plugin { private function deleteTriggerFile($triggerFile) { global $app; + exec(sprintf('chattr -i %s', $triggerFile)); unlink($triggerFile); $app->log(sprintf('Deleted incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG); -- GitLab From 7e2cecabe3d0ca698c29e6cd471f78feb0753743 Mon Sep 17 00:00:00 2001 From: Webslice Date: Mon, 4 Feb 2019 11:22:51 +0100 Subject: [PATCH 3/5] #5218 incrond service is called 'incron' on debian --- server/plugins-available/incron_plugin.inc.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/plugins-available/incron_plugin.inc.php b/server/plugins-available/incron_plugin.inc.php index f072a850b6..3b771de633 100644 --- a/server/plugins-available/incron_plugin.inc.php +++ b/server/plugins-available/incron_plugin.inc.php @@ -159,6 +159,11 @@ class incron_plugin { private function restartIncronService() { global $app; - exec($app->system->getinitcommand('incrond', 'restart')); + $serviceName = 'incrond'; + if (file_exists('/etc/debian_version')) { + $serviceName = 'incron'; + } + + exec($app->system->getinitcommand($serviceName, 'restart')); } } \ No newline at end of file -- GitLab From cddd060ed64959fc0c16ca78c3f6e135a4265f14 Mon Sep 17 00:00:00 2001 From: Webslice Date: Mon, 4 Feb 2019 11:39:33 +0100 Subject: [PATCH 4/5] #5218 remove chattr +i If the plugin runs at the end, and you are deleting a Site, the deletion will not run completely because the trigger file still exists --- ...{incron_plugin.inc.php => z_incron_plugin.inc.php} | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) rename server/plugins-available/{incron_plugin.inc.php => z_incron_plugin.inc.php} (93%) diff --git a/server/plugins-available/incron_plugin.inc.php b/server/plugins-available/z_incron_plugin.inc.php similarity index 93% rename from server/plugins-available/incron_plugin.inc.php rename to server/plugins-available/z_incron_plugin.inc.php index 3b771de633..dfde5235ff 100644 --- a/server/plugins-available/incron_plugin.inc.php +++ b/server/plugins-available/z_incron_plugin.inc.php @@ -5,11 +5,14 @@ * configuration which will take care of reloading the php-fpm pool when the file /private/php-fpm.reload is touched. * Projects which use deployment tools can use this to reload php-fpm to clear the opcache at deploy time, without * requiring superuser privileges. + * + * The plugin is called `z_incron_plugin` because plugins are executed alphabetically, and this plugin can only run + * when apache2/nginx plugins have already run so the directories and user/group exist. */ -class incron_plugin { +class z_incron_plugin { - var $plugin_name = 'incron_plugin'; - var $class_name = 'incron_plugin'; + var $plugin_name = 'z_incron_plugin'; + var $class_name = 'z_incron_plugin'; function onInstall() { global $conf; @@ -111,7 +114,6 @@ class incron_plugin { } exec(sprintf('chown %s:%s %s', $systemUser, $systemGroup, $triggerFile)); - exec(sprintf('chattr +i %s', $triggerFile)); $app->log(sprintf('Ensured incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG); } @@ -128,7 +130,6 @@ class incron_plugin { private function deleteTriggerFile($triggerFile) { global $app; - exec(sprintf('chattr -i %s', $triggerFile)); unlink($triggerFile); $app->log(sprintf('Deleted incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG); -- GitLab From 80ef57a63482c8f22c3ee6bfaa722c942cd1b594 Mon Sep 17 00:00:00 2001 From: Webslice Date: Tue, 5 Feb 2019 12:49:32 +0100 Subject: [PATCH 5/5] 5218 rename plugin and only run if checkbox in config is ticked --- .../web/admin/form/server_config.tform.php | 6 +++ .../web/admin/lib/lang/ar_server_config.lng | 1 + .../web/admin/lib/lang/bg_server_config.lng | 1 + .../web/admin/lib/lang/br_server_config.lng | 1 + .../web/admin/lib/lang/ca_server_config.lng | 1 + .../web/admin/lib/lang/cz_server_config.lng | 1 + .../web/admin/lib/lang/de_server_config.lng | 1 + .../web/admin/lib/lang/dk_server_config.lng | 1 + .../web/admin/lib/lang/el_server_config.lng | 1 + .../web/admin/lib/lang/en_server_config.lng | 1 + .../web/admin/lib/lang/es_server_config.lng | 1 + .../web/admin/lib/lang/fi_server_config.lng | 1 + .../web/admin/lib/lang/fr_server_config.lng | 1 + .../web/admin/lib/lang/hr_server_config.lng | 1 + .../web/admin/lib/lang/hu_server_config.lng | 1 + .../web/admin/lib/lang/id_server_config.lng | 1 + .../web/admin/lib/lang/it_server_config.lng | 1 + .../web/admin/lib/lang/ja_server_config.lng | 1 + .../web/admin/lib/lang/nl_server_config.lng | 1 + .../web/admin/lib/lang/pl_server_config.lng | 1 + .../web/admin/lib/lang/pt_server_config.lng | 1 + .../web/admin/lib/lang/ro_server_config.lng | 1 + .../web/admin/lib/lang/ru_server_config.lng | 1 + .../web/admin/lib/lang/se_server_config.lng | 1 + .../web/admin/lib/lang/sk_server_config.lng | 1 + .../web/admin/lib/lang/tr_server_config.lng | 1 + .../templates/server_config_web_edit.htm | 6 +++ ...=> z_php_fpm_incron_reload_plugin.inc.php} | 47 +++++++++++++------ 28 files changed, 70 insertions(+), 14 deletions(-) rename server/plugins-available/{z_incron_plugin.inc.php => z_php_fpm_incron_reload_plugin.inc.php} (82%) diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index a127430494..e0cf897abd 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -1211,6 +1211,12 @@ $form["tabs"]['web'] = array( 'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'), 'searchable' => 2 ), + 'php_fpm_incron_reload' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ), 'nginx_cgi_socket' => array( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng index b7e75ffd44..00e94f766b 100644 --- a/interface/web/admin/lib/lang/ar_server_config.lng +++ b/interface/web/admin/lib/lang/ar_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng index 37f654d5a6..7c6ae9f2dc 100644 --- a/interface/web/admin/lib/lang/bg_server_config.lng +++ b/interface/web/admin/lib/lang/bg_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng index b016ad04c3..9175790eb3 100644 --- a/interface/web/admin/lib/lang/br_server_config.lng +++ b/interface/web/admin/lib/lang/br_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Usar o comando mount, se o diretório de back $wb['overquota_db_notify_admin_txt'] = 'Enviar mensagens de alerta de cota do banco de dados para o administrador'; $wb['overquota_db_notify_client_txt'] = 'Enviar mensagens de alerta de cota do banco de dados para o cliente'; $wb['php_handler_txt'] = 'Manipulador padrão PHP'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Desabilitado'; $wb['dkim_strength_txt'] = 'Dificuldade do DKIM'; $wb['php_ini_check_minutes_txt'] = 'Verificar modificações do php.ini a cada N minutos'; diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng index a83144b334..dc44dd340c 100644 --- a/interface/web/admin/lib/lang/ca_server_config.lng +++ b/interface/web/admin/lib/lang/ca_server_config.lng @@ -208,6 +208,7 @@ $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['monitor_system_updates_txt'] = 'Check for Linux updates'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['invalid_apache_user_txt'] = 'Invalid apache user.'; diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng index 9a76563522..e219a7b3e4 100644 --- a/interface/web/admin/lib/lang/cz_server_config.lng +++ b/interface/web/admin/lib/lang/cz_server_config.lng @@ -257,6 +257,7 @@ $wb['backup_delete_txt'] = 'Odstranit zálohy pokud byla smazána doména/webov $wb['overquota_db_notify_admin_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót adminovi'; $wb['overquota_db_notify_client_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót klientovi'; $wb['php_handler_txt'] = 'Výchozí PHP obslužná rutina'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Vypnuto'; $wb['php_ini_check_minutes_txt'] = 'Provádět kontrolu změny obsahu souboru php.ini každých X minut'; $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.'; diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index 1d8109e8e1..73c6609a1a 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -267,6 +267,7 @@ $wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderunge $wb['php_ini_check_minutes_error_empty'] = 'Bitte geben Sie einen Wert an, wie oft die php.ini auf Änderungen geprüft werden soll.'; $wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung'; $wb['php_handler_txt'] = 'Standard-PHP-Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung'; $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng index 26f953d5b4..47daacd86a 100644 --- a/interface/web/admin/lib/lang/dk_server_config.lng +++ b/interface/web/admin/lib/lang/dk_server_config.lng @@ -260,6 +260,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng index 1298ea71ae..2755ade7c2 100644 --- a/interface/web/admin/lib/lang/el_server_config.lng +++ b/interface/web/admin/lib/lang/el_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index fe35d1c5ed..7ca9967922 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -212,6 +212,7 @@ $wb["overquota_db_notify_admin_txt"] = 'Send DB quota warnings to admin'; $wb["overquota_db_notify_client_txt"] = 'Send DB quota warnings to client'; $wb['monitor_system_updates_txt'] = 'Check for Linux updates'; $wb['php_handler_txt'] = "Default PHP Handler"; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['monitor_system_updates_txt'] = 'Check for Linux updates'; diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng index 5ce3381d98..042671e594 100755 --- a/interface/web/admin/lib/lang/es_server_config.lng +++ b/interface/web/admin/lib/lang/es_server_config.lng @@ -206,6 +206,7 @@ $wb['php_fpm_socket_dir_txt'] = 'Directorio para el socket de PHP-FPM'; $wb['php_fpm_start_port_error_empty'] = 'El puerto de inicio de PHP-FPM está vacío.'; $wb['php_fpm_start_port_txt'] = 'Puerto de inicio de PHP-FPM'; $wb['php_handler_txt'] = 'Controlador PHP por defecto'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['php_ini_check_minutes_error_empty'] = 'Por favor especifique un valor para definir con qué frecuencia se deberían buscar cambios en el archivo php.ini.'; $wb['php_ini_check_minutes_info_txt'] = '0 = no comprobar'; $wb['php_ini_check_minutes_txt'] = 'Comprobar cambios en php.ini cada X minutos'; diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng index 4609ce5b13..4d76c3f5eb 100755 --- a/interface/web/admin/lib/lang/fi_server_config.lng +++ b/interface/web/admin/lib/lang/fi_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng index e31d68383e..d1e229e7ce 100644 --- a/interface/web/admin/lib/lang/fr_server_config.lng +++ b/interface/web/admin/lib/lang/fr_server_config.lng @@ -259,6 +259,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng index c54a67659d..ebfe30a16d 100644 --- a/interface/web/admin/lib/lang/hr_server_config.lng +++ b/interface/web/admin/lib/lang/hr_server_config.lng @@ -261,6 +261,7 @@ $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng index 1ac1cd2685..f491b4b2da 100644 --- a/interface/web/admin/lib/lang/hu_server_config.lng +++ b/interface/web/admin/lib/lang/hu_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng index a473891964..f56204188a 100644 --- a/interface/web/admin/lib/lang/id_server_config.lng +++ b/interface/web/admin/lib/lang/id_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index 8c563853c7..24b89ee8bd 100644 --- a/interface/web/admin/lib/lang/it_server_config.lng +++ b/interface/web/admin/lib/lang/it_server_config.lng @@ -259,6 +259,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng index 76c400728b..72cecbcccd 100644 --- a/interface/web/admin/lib/lang/ja_server_config.lng +++ b/interface/web/admin/lib/lang/ja_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng index 350a06ba36..389a0ea877 100644 --- a/interface/web/admin/lib/lang/nl_server_config.lng +++ b/interface/web/admin/lib/lang/nl_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng index c052b7f373..a05df05752 100644 --- a/interface/web/admin/lib/lang/pl_server_config.lng +++ b/interface/web/admin/lib/lang/pl_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng index 4767022e49..ba5bd38248 100644 --- a/interface/web/admin/lib/lang/pt_server_config.lng +++ b/interface/web/admin/lib/lang/pt_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng index 41b967b735..5a29d0eff0 100644 --- a/interface/web/admin/lib/lang/ro_server_config.lng +++ b/interface/web/admin/lib/lang/ro_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng index 0775ab7f88..7ed1fb88ab 100644 --- a/interface/web/admin/lib/lang/ru_server_config.lng +++ b/interface/web/admin/lib/lang/ru_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Выполните команду монти $wb['overquota_db_notify_admin_txt'] = 'Присылать предупреждения квоты DB администратору'; $wb['overquota_db_notify_client_txt'] = 'Присылать предупреждения квоты DB клиенту'; $wb['php_handler_txt'] = 'Обработчик PHP по умолчанию'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Отключено'; $wb['dkim_strength_txt'] = 'Стойкость DKIM'; $wb['php_ini_check_minutes_txt'] = 'Проверять изменения в PHP.ini файле каждые Х минут'; diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng index 5808fb2f5e..196fe3ffd0 100644 --- a/interface/web/admin/lib/lang/se_server_config.lng +++ b/interface/web/admin/lib/lang/se_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng index d5b1f92bf0..9d4703c4b3 100644 --- a/interface/web/admin/lib/lang/sk_server_config.lng +++ b/interface/web/admin/lib/lang/sk_server_config.lng @@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng index c7be379260..b6a742781d 100644 --- a/interface/web/admin/lib/lang/tr_server_config.lng +++ b/interface/web/admin/lib/lang/tr_server_config.lng @@ -260,6 +260,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; +$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM'; $wb['disabled_txt'] = 'Disabled'; $wb['dkim_strength_txt'] = 'DKIM strength'; $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes'; diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm index bb61d866ca..8cc8dc4340 100644 --- a/interface/web/admin/templates/server_config_web_edit.htm +++ b/interface/web/admin/templates/server_config_web_edit.htm @@ -293,6 +293,12 @@ {tmpl_var name='php_handler'} +
+ +
+ {tmpl_var name='php_fpm_incron_reload'} +
+
diff --git a/server/plugins-available/z_incron_plugin.inc.php b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php similarity index 82% rename from server/plugins-available/z_incron_plugin.inc.php rename to server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php index dfde5235ff..bc88f4a198 100644 --- a/server/plugins-available/z_incron_plugin.inc.php +++ b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php @@ -6,31 +6,33 @@ * Projects which use deployment tools can use this to reload php-fpm to clear the opcache at deploy time, without * requiring superuser privileges. * - * The plugin is called `z_incron_plugin` because plugins are executed alphabetically, and this plugin can only run - * when apache2/nginx plugins have already run so the directories and user/group exist. + * The plugin is prefixed with `z_` because plugins are executed alphabetically, and this plugin + * must only run after apache2/nginx plugins so we are sure the directories and user/group exist. */ -class z_incron_plugin { +class z_php_fpm_incron_reload_plugin { - var $plugin_name = 'z_incron_plugin'; - var $class_name = 'z_incron_plugin'; + var $plugin_name = 'z_php_fpm_incron_reload_plugin'; + var $class_name = 'z_php_fpm_incron_reload_plugin'; function onInstall() { global $conf; - if ($conf['services']['web'] !== true) { - return false; - } - - if ($this->isIncronAvailable() === false) { - return false; - } - - return true; + return $conf['services']['web'] === true; } function onLoad() { global $app; + if ($this->isPluginEnabled() === false) { + return; + } + + if ($this->isIncronAvailable() === false) { + $app->log('You must install incron in order to use this plugin', LOGLEVEL_DEBUG); + + return; + } + $app->plugins->registerEvent('web_domain_insert', $this->plugin_name, 'incronInsert'); $app->plugins->registerEvent('web_domain_update', $this->plugin_name, 'incronUpdate'); $app->plugins->registerEvent('web_domain_delete', $this->plugin_name, 'incronDelete'); @@ -88,6 +90,15 @@ class z_incron_plugin { return $retval === 0; } + private function isPluginEnabled() { + global $app, $conf; + + $app->uses('getconf'); + $serverConfig = $app->getconf->get_server_config($conf['server_id'], 'web'); + + return $serverConfig['php_fpm_incron_reload'] === 'y'; + } + private function createIncronConfiguration($triggerFile, $systemUser, $fastcgiPhpVersion) { global $app; @@ -122,6 +133,10 @@ class z_incron_plugin { global $app; $configFile = $this->getIncronConfigurationFilePath($systemUser); + if (!file_exists($configFile)) { + return; + } + unlink($configFile); $app->log(sprintf('Deleted incron configuration "%s"', $configFile), LOGLEVEL_DEBUG); @@ -130,6 +145,10 @@ class z_incron_plugin { private function deleteTriggerFile($triggerFile) { global $app; + if (!file_exists($triggerFile)) { + return; + } + unlink($triggerFile); $app->log(sprintf('Deleted incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG); -- GitLab