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:
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!!!
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?!?!
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:
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ß
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 ;)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.