From c36a7bf22bc14ad3d423fc43bcdc572a5cb6ad4d Mon Sep 17 00:00:00 2001 From: "Christoph Burchert (Chb)" Date: Mon, 5 Sep 2011 14:56:50 +0200 Subject: [PATCH] Add logrotate support, fixes #16 (thanks to monotek!) Signed-off-by: Christoph Burchert (Chb) --- actions/admin/settings/225.logrotate.php | 67 +++++++++++++++++++ install/froxlor.sql | 4 ++ .../updates/froxlor/0.9/update_0.9.inc.php | 6 ++ lng/english.lng.php | 7 ++ lng/german.lng.php | 7 ++ scripts/jobs/cron_traffic.php | 29 ++++++++ 6 files changed, 120 insertions(+) create mode 100644 actions/admin/settings/225.logrotate.php diff --git a/actions/admin/settings/225.logrotate.php b/actions/admin/settings/225.logrotate.php new file mode 100644 index 00000000..9c6b8013 --- /dev/null +++ b/actions/admin/settings/225.logrotate.php @@ -0,0 +1,67 @@ + (2003-2009) + * @author Froxlor team (2010-) + * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt + * @package Settings + * + */ + +return array( +'groups' => array( + 'logrotate' => array( + 'title' => $lng['logrotate'], + 'fields' => array( + 'logrotate_enabled' => array( + 'label' => $lng['logrotate_enabled'], + 'settinggroup' => 'system', + 'varname' => 'logrotate_enabled', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + 'overview_option' => true + ), + 'logrotate_binary' => array( + 'label' => $lng['logrotate_binary'], + 'settinggroup' => 'system', + 'varname' => 'logrotate_binary', + 'type' => 'string', + 'default' => '/usr/sbin/logrotate', + 'save_method' => 'storeSettingField', + 'overview_option' => false + ), + 'logrotate_interval' => array( + 'label' => $lng['logrotate_interval'], + 'settinggroup' => 'system', + 'varname' => 'logrotate_interval', + 'type' => 'option', + 'default' => 'weekly', + 'option_mode' => 'one', + 'option_options' => array('daily' => 'Daily', 'weekly' => 'Weekly', 'monthly' => 'Monthly'), + 'save_method' => 'storeSettingField', + 'overview_option' => false + ), + 'logrotate_keep' => array( + 'label' => $lng['logrotate_keep'], + 'settinggroup' => 'system', + 'varname' => 'logrotate_keep', + 'type' => 'string', + 'default' => '4', + 'save_method' => 'storeSettingField', + 'overview_option' => false + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/install/froxlor.sql b/install/froxlor.sql index 4d75fb5f..e42db12a 100644 --- a/install/froxlor.sql +++ b/install/froxlor.sql @@ -636,6 +636,10 @@ INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('syste INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('system', 'diskquota_repquota_path', '/usr/sbin/repquota'); INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('system', 'diskquota_quotatool_path', '/usr/bin/quotatool'); INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('system', 'diskquota_customer_partition', '/dev/root'); +INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_enabled', '0'); +INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_binary', '/usr/sbin/logrotate'); +INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_interval', 'weekly'); +INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_keep', '4'); # -------------------------------------------------------- diff --git a/install/updates/froxlor/0.9/update_0.9.inc.php b/install/updates/froxlor/0.9/update_0.9.inc.php index 2fcd5e02..6a305832 100644 --- a/install/updates/froxlor/0.9/update_0.9.inc.php +++ b/install/updates/froxlor/0.9/update_0.9.inc.php @@ -1675,6 +1675,12 @@ if(isFroxlorVersion('0.9.23-rc1')) { showUpdateStep("Updating from 0.9.23-rc1 to 0.9.23"); lastStepStatus(0); + + /* add new settings for logrotate - support */ + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_enabled', '0');"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_binary', '/usr/sbin/logrotate');"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_interval', 'weekly');"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'logrotate_keep', '4');"); updateToVersion('0.9.23'); } diff --git a/lng/english.lng.php b/lng/english.lng.php index 68e15141..12281f07 100644 --- a/lng/english.lng.php +++ b/lng/english.lng.php @@ -1887,3 +1887,10 @@ $lng['serversettings']['diskquota_customer_partition']['description'] = 'Partiti $lng['tasks']['diskspace_set_quota'] = 'Set quota on filesystem'; $lng['error']['session_timeout'] = 'Value too low'; $lng['error']['session_timeout_desc'] = 'You should not set the session timeout lower than 1 minute.'; + +// ADDED IN FROXLOR 0.9.23 +$lng['logrotate'] = 'Logrotate'; +$lng['logrotate_enabled'] = 'Enable logrotate?'; +$lng['logrotate_binary'] = 'Path to logrotate binary:'; +$lng['logrotate_interval'] = 'Interval?'; +$lng['logrotate_keep'] = 'How many logfiles should be kept?'; \ No newline at end of file diff --git a/lng/german.lng.php b/lng/german.lng.php index 3cf216cf..9d8bded8 100644 --- a/lng/german.lng.php +++ b/lng/german.lng.php @@ -1618,3 +1618,10 @@ $lng['serversettings']['diskquota_customer_partition']['description'] = 'Partiti $lng['tasks']['diskspace_set_quota'] = 'Quota auf dem Dateisystem setzen'; $lng['error']['session_timeout'] = 'Wert zu niedrig'; $lng['error']['session_timeout_desc'] = 'Der Wert der Session Timeout sollte nicht unter einer Minute liegen.'; + +// ADDED IN FROXLOR 0.9.23 +$lng['logrotate'] = 'Logrotate'; +$lng['logrotate_enabled'] = 'Logrotate aktivieren?'; +$lng['logrotate_binary'] = 'Pfad zum logrotate binary?'; +$lng['logrotate_interval'] = 'Intervall?'; +$lng['logrotate_keep'] = 'Wie viele Logdateien sollen aufbewahrt werden?'; \ No newline at end of file diff --git a/scripts/jobs/cron_traffic.php b/scripts/jobs/cron_traffic.php index 1f78bce0..7e830138 100644 --- a/scripts/jobs/cron_traffic.php +++ b/scripts/jobs/cron_traffic.php @@ -199,6 +199,35 @@ while($row = $db->fetch_array($result)) // make the stuff readable for the customer, #258 makeChownWithNewStats($row); + + // logrotate + if($settings['system']['logrotate_enabled'] == '1') + { + fwrite($debugHandler, ' logrotate customers logs' . "\n"); + + $logrotatefile = '/tmp/froxlor_logrotate_tmpfile.conf'; + $fh = fopen($logrotatefile, 'w'); + + $logconf = '# ' . basename($logrotatefile) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . + $settings['system']['logfiles_directory'] . $row['loginname'] . '-access.log ' . + $settings['system']['logfiles_directory'] . $row['loginname'] . '-error.log {' . "\n" . + $settings['system']['logrotate_interval'] . "\n" . + 'missingok' . "\n" . + 'rotate ' . $settings['system']['logrotate_keep'] . "\n" . + 'compress' . "\n" . + 'delaycompress' . "\n" . + 'notifempty' . "\n" . + 'create' . "\n" . + '}' . "\n"; + + fwrite($fh, $logconf); + fclose($fh); + + safe_exec(escapeshellcmd($settings['system']['logrotate_binary']) . ' ' . $logrotatefile); + + fwrite($debugHandler, ' apache::reload: reloading apache' . "\n"); + safe_exec(escapeshellcmd($settings['system']['apachereload_command'])); + } /** * Webalizer/AWStats might run for some time, so we'd better check if our database is still present