diff options
author | jim-p <jimp@pfsense.org> | 2011-12-29 09:30:05 -0500 |
---|---|---|
committer | jim-p <jimp@pfsense.org> | 2011-12-29 09:35:23 -0500 |
commit | 4a4429cbcf28a631014574eaf2b93f0b41555995 (patch) | |
tree | 59aaf73b3c30d5c13ac6c6696a10ea484d8cd2e2 /config/squid/squid.inc | |
parent | 5516aa102df93816dff4bab5a9ddd67a72710c00 (diff) | |
download | pfsense-packages-4a4429cbcf28a631014574eaf2b93f0b41555995.tar.gz pfsense-packages-4a4429cbcf28a631014574eaf2b93f0b41555995.tar.bz2 pfsense-packages-4a4429cbcf28a631014574eaf2b93f0b41555995.zip |
Add a periodic cron job to keep an eye on the size of swap.state and rm/rotate as needed. Also remove swap.state before the daily rotate process runs, and make sure that the daily rotate happens each day even when the normal log rotation is disabled (set logfile_rotate to 0 if not set in the GUI)
Diffstat (limited to 'config/squid/squid.inc')
-rw-r--r-- | config/squid/squid.inc | 73 |
1 files changed, 51 insertions, 22 deletions
diff --git a/config/squid/squid.inc b/config/squid/squid.inc index 5ad2eb4c..cd05151a 100644 --- a/config/squid/squid.inc +++ b/config/squid/squid.inc @@ -210,6 +210,8 @@ function squid_install_command() { exec("/bin/rm /usr/local/etc/rc.d/squid"); squid_write_rcfile(); exec("chmod a+rx /usr/local/libexec/squid/dnsserver"); + if(file_exists("/usr/local/pkg/swapstate_check.php")) + exec("/bin/chmod a+x /usr/local/pkg/swapstate_check.php"); foreach (array( SQUID_CONFBASE, SQUID_ACLDIR, @@ -534,21 +536,29 @@ function squid_install_cron($should_install) { global $config, $g; if($g['booting']==true) return; - $is_installed = false; + $rotate_is_installed = false; + $swapstate_is_installed = false; if(!$config['cron']['item']) return; + $settings = $config['installedpackages']['squidcache']['config'][0]; + $x=0; + $rotate_job_id=-1; + $swapstate_job_id=-1; + foreach($config['cron']['item'] as $item) { if(strstr($item['task_name'], "squid_rotate_logs")) { - $is_installed = true; - break; + $rotate_job_id = $x; + } elseif(strstr($item['task_name'], "squid_check_swapstate")) { + $swapstate_job_id = $x; } $x++; } + $need_write = false; switch($should_install) { case true: - if(!$is_installed) { - $cachedir =($settings['harddisk_cache_location'] ? $settings['harddisk_cache_location'] : '/var/squid/cache'); + $cachedir =($settings['harddisk_cache_location'] ? $settings['harddisk_cache_location'] : '/var/squid/cache'); + if($rotate_job_id < 0) { $cron_item = array(); $cron_item['task_name'] = "squid_rotate_logs"; $cron_item['minute'] = "0"; @@ -557,24 +567,44 @@ function squid_install_cron($should_install) { $cron_item['month'] = "*"; $cron_item['wday'] = "*"; $cron_item['who'] = "root"; - $cron_item['command'] = "/bin/rm {$cachedir}/swap.state; /usr/local/sbin/squid -k rotate"; + $cron_item['command'] = "/bin/rm {$cachedir}/swap.state; /usr/local/sbin/squid -k rotate"; + $config['cron']['item'][] = $cron_item; + $need_write = true; + } + if($swapstate_job_id < 0) { + $cron_item = array(); + $cron_item['task_name'] = "squid_check_swapstate"; + $cron_item['minute'] = "*/15"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/local/pkg/swapstate_check.php"; $config['cron']['item'][] = $cron_item; + $need_write = true; + } + if ($need_write) { parse_config(true); - write_config("Squid Log Rotation"); - configure_cron(); + write_config("Adding Squid Cron Jobs"); } break; case false: - if($is_installed == true) { - if($x > 0) { - unset($config['cron']['item'][$x]); - parse_config(true); - write_config(); - } - configure_cron(); + if($rotate_job_id >= 0) { + unset($config['cron']['item'][$rotate_job_id]); + $need_write = true; + } + if($swapstate_job_id >= 0) { + unset($config['cron']['item'][$swapstate_job_id]); + $need_write = true; + } + if ($need_write) { + parse_config(true); + write_config("Removing Squid Cron Jobs"); } break; } + configure_cron(); } function squid_resync_general() { @@ -626,13 +656,12 @@ cache_store_log none EOD; - if (!empty($settings['log_rotate'])) { - $conf .= "logfile_rotate {$settings['log_rotate']}\n"; - squid_install_cron(true); - } - else { - squid_install_cron(false); - } + // Per squid docs, setting logfile_rotate to 0 is safe and causes a simple close/reopen. + // Rotating also ensures that swap.state is rewritten, so is useful even if the logs + // are not being rotated. + $rotate = empty($settings['log_rotate']) ? 0 : $settings['log_rotate']; + $conf .= "logfile_rotate {$settings['log_rotate']}\n"; + squid_install_cron(true); $conf .= <<<EOD shutdown_lifetime 3 seconds |