PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Squid Cache löschen



sheperd-tz
07.10.04, 07:57
Moin Unixgemeinde!

Ich würde gerne den Squid-Cache löschen, ohne den Squid runterzufahren (also nicht "rcsquid stop"). Gibt es eine Möglichkeit den Cache im laufenden betrieb von Squid zu löschen? :confused:

mamue
07.10.04, 08:31
IMHO nicht. Der Squid-cache ist Datenbank-ähnlich aufgebaut. Einige Elemente werden auch im Speicher gehalten. Du wirst wohl squid stoppen müssen.
Wenn das gar nicht geht, könntest Du über iptables einen redirect auf einen Ersatzcache einleiten und dann den "alten" squid stoppen und löschen.

mamue

sheperd-tz
07.10.04, 09:04
Gut, dann hab ich 3 Möglichkeiten gefunden, die man im Stopp-Modus realisieren kann. Welche davon ist dann eurer Meinung nach die beste?

Alternative 1: Cache im Stopp-Modus löschen:

1. sich als root einloggen
2. „rcsquid stop“
3. „mc /var/proxy/cache“ (oder wo das Cache-Verzeichnis sonst abgelegt ist)
4. alles mit der Einfügen-Taste makieren
5. mit F8 alle Dateien löschen
6. auf der Textkonsole => „/usr/squid/bin/squid –z“
7. „rcsquid start“
Kursiv geschriebene Schritte dauern etwas länger! (Vorgang kann bis zu 10 Minuten dauern!!!)



Alternative 2: Cache im Stopp-Modus löschen:

1. sich als root einloggen
2. „/etc/init.d/squid –k shutdown“
3. jeden Ordner im cache_dir mit dem Befehl „echo ““ > /cache1/swap.state“ (wobei cache1 für ein Verzeichnis im cache_dir steht, dadurch wird in jedem Verzeichnis die swap.state überschrieben)
4. „rcsquid start“

Alternative 3: Cache im Stopp-Modus löschen:

1. sich als root einloggen
2. „/etc/init.d/squid –k stop”
3. „cd /cache1“ (wobei cache1 für das Verzeichnis cache_dir steht)
4. „mkdir cache2“
5. „mv cache1/swap.state* cache2“
6. „rm –rf cache2 &”
7. „rcsquid start“

Sry wegen der schlechten Formatierung aber das liegt an Microschrott Word!!!

mamue
07.10.04, 10:25
Legt nicht squid -z den Cache neu an? Dann müsste doch:
rcsquid stop; squid -z; rcsquid start
genügen. Den alten explizit löschen, ist meiner Ansicht nach nicht nötig.

mamue

sheperd-tz
07.10.04, 10:44
Squid -z legt ledigleich neue Verzeichnisse an, die es braucht um die Daten zu speichern. Doch was wenn diese verzeichnisse schon vorhanden sind? ich denke nicht, dass Squid die dann automatisch überschreibt und so tut als wären keine Daten im Cache?!?!

psy
07.10.04, 10:54
bei webmin im modul squid gibts eine option "squid-cache leeren und neu aufbauen", man müsste halt mal herausfinden, was webmin in diesem moment ausführt...

ciao
psy

sheperd-tz
07.10.04, 11:03
leider benutze ich kein webmin =(

:mad: :mad: :mad: :mad: :mad: :mad: :mad:

psy
07.10.04, 11:05
ja und?

sagt ja keiner, dass du webmin benutzen sollst, es geht hier um die funktion welche ausgeführt wird...

sheperd-tz
07.10.04, 11:17
ok, du hast recht.... hmmm kann man das nicht irgendwie auf ner anderen konsole laufen lassen während webmin das verarbeitet???

Stormbringer
07.10.04, 11:34
Funzen tut auf jeden Fall:
/etc/ini.d/squid stop
rm -R /var/cache/squid/*
/usr/sbin/squid -z
/etc/init.d/squid start
(Oder wie auch immer die Pfade lauten - es wird alles komplett neu aufgebaut.)

Da gibt es nichts mit F8, oder ähnliches ...
Außerdem heißt es "Microsoft Word" ... und wenn Dir das zu peinlich ist, dann nutze es halt nicht ...

Gruß

psy
07.10.04, 11:48
hier ist das cgi-script welches webmin ausführt um den cache zu leeren, evtl. hilft dir das ja weiter...


#!/usr/bin/perl
# clear.cgi
# Delete the cache, chown the directory to the correct user and re-run squid -z

require './squid-lib.pl';
$access{'rebuild'} || &error($text{'clear_ecannot'});
&ReadParse();
$| = 1;
$theme_no_table = 1;
$config{'cache_dir'} =~ /^\/\S+/ || &error("Cache directory not set");
&ui_print_header(undef, $text{'clear_header'}, "");
$conf = &get_config();

if (!$in{'confirm'}) {
print $text{'clear_msgclear'},"<br>\n";
print $text{'clear_msgclear2'},"<br>\n";
print "<form action=clear.cgi>\n";
print "<center><input type=submit name=confirm ",
"value=\"$text{'clear_buttclear'}\"></center></form>\n";
&ui_print_footer("", $text{'clear_return'});
exit;
}

# Stop squid (if running)
if ($pidstruct = &find_config("pid_filename", $conf)) {
$pidfile = $pidstruct->{'values'}->[0];
}
else { $pidfile = $config{'pid_file'}; }
if (open(PID, $pidfile)) {
<PID> =~ /(\d+)/; $pid = $1;
close(PID);
}
if ($pid && kill(0, $pid)) {
print "<p>$text{'clear_stop'}<br>\n";
&system_logged("$config{'squid_path'} -f $config{'squid_conf'} ".
"-k shutdown >/dev/null 2>&1");
for($i=0; $i<40; $i++) {
if (!kill(0, $pid)) { last; }
sleep(1);
}
print "$text{'clear_done'}<br>\n";
$stopped++;
}

# Get list of cache dirs
if (@cachestruct = &find_config("cache_dir", $conf)) {
if ($squid_version >= 2.3) {
@caches = map { $_->{'values'}->[1] } @cachestruct;
}
else {
@caches = map { $_->{'values'}->[0] } @cachestruct;
}
}
else { @caches = ( $config{'cache_dir'} ); }

# Delete old cache files and re-create with same permissions!
print "<p>$text{'clear_del'}<br>\n";
foreach $c (@caches) {
@st = stat($c);
if (@st) {
&system_logged("rm -rf $c >/dev/null 2>&1");
mkdir($c, 0755);
chown($st[4], $st[5], $c);
chmod($st[2], $c);
}
}
print "$text{'clear_done'}<br>\n";

$cmd = "$config{'squid_path'} -f $config{'squid_conf'} -z";
print "<p>".&text('clear_init',$cmd)."<br>\n";
print "<pre>\n";
&additional_log('exec', undef, $cmd);
open(INIT, "$cmd 2>&1 |");
while(<INIT>) {
print &html_escape($_);
}
close(INIT);
print "</pre>\n";
print "$text{'clear_done'}<br>\n";

# Try to re-start squid
if ($stopped) {
$temp = &tempname();
&system_logged("$config{'squid_path'} -sY -f $config{'squid_conf'} >$temp 2>&1 </dev/null &");
sleep(3);
$errs = `cat $temp`;
unlink($temp);
if ($errs) {
&system_logged("$config{'squid_path'} -k shutdown -f $config{'squid_conf'} >/dev/null 2>&1");
print "$text{'clear_failrestart'}<br>\n";
print "<pre>$errs</pre>\n";
}
}

&webmin_log("clear");
&ui_print_footer("", $text{'clear_return'});

sheperd-tz
07.10.04, 12:03
hmmmm werd's mal probieren...

@Stormbringer: ups sorry, da muss ich mich wohl verschrieben haben ;)