17. december 2004 - 11:48Der er
13 kommentarer og 2 løsninger
VBscript får server til at blive ustabil
Hej alle
Ved godt at dette burde lægge i VB-forumet, men der får jeg intet hjælp, så jeg prøver i asp-forumet i stedet.
Jeg har dette vb-script, som jeg mistænker for få min server (IIS) til at blive ustabil - i hvert fald går den senere ned, når den afvikler den næste planlagt opgave (opgaver som køres om natten). Jeg kan ikke fremprovokere nogle fejl (fordi scriptet i sig selv virker), men der må være et eller andet galt med det alligevel. (Over der er ikke tale om overlapning af planlagte opgaver).
Kan du ikke optimere script for mig og omprogrammere kritiske dele? (Jeg kender ikke så meget til vb-scripts)
sub ChkDelFolder(f) for each folder in f.Subfolders if (folder.name="Deleted Items") or (folder.name="Sent Items") then folder.delete() 'msgbox folder else ChkDelFolder(folder) end if next end sub
startFolder="C:\Program Files\Mail Enable\Postoffices" dim folder,folderCol Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") set f = objFSO.getFolder(startFolder)
for each folder in f.subfolders ChkDelFolder(folder) next set folder = nothing set objFSO = nothing
startFolder="C:\Program Files\Mail Enable\Backup\Sets\Autoback\Store\Postoffices" Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") set f = objFSO.getFolder(startFolder)
for each folder in f.subfolders ChkDelFolder(folder) next set folder = nothing set objFSO = nothing
HEY! Du laver et rekursivt kald, det er ikke noget jeg har gode erfaringer med i VBScript.
Laver lige lidt test, jeg trænger faktisk til at få det opfrisket.
Rekursivt kald betyder at du kalder en funktion fra inde i en funktion. Det er en rigtig smart ting, hvis man kan regne med at hvert kald er isoleret. Hvis koden tror at f er det samme f so blev brugt i sidste kald, så går det i fisk.
Det kan godt passe at denne kode lægger serveren ned. Siger du at den virker? sletter den også i subfolders?
Kode virker, den gør hvad den skal gøre, og den kommer ikke med nogle fejl. Efter 30 sekunder er den færdigafviklet og bibliotekerne er slettet, som de bør være. Ingen problemer der. Men det må være noglet galt, fordi hver gang jeg piller den ud af mine planlagte opgaver, så går serveren ikke ned (om natten).
Så selv om den ikke returnere nogle fejl, så må den lave noget forkert alligevel i form af, at den ikke lukker og slukker korrekt efter sig.
I følge server-loggen, så går serveren ned efter at den har afviklet koden (dvs. efter omtalte 30 sekunder). Men hvis jeg dobbeltklikker på vb-filen, så den afvikles, så går serveren ikke ned. Det er kun når jeg sætter den til at køre som en planlagt opgave om natten, at den får server til at gå ned.
Ikke at jeg har lavet så meget om, jeg Dim'er alt, og undlader at genbruge variabelnavne, jeg ved ikke om det hjælper, men ellers må du ndgå rekursive kald. Det giver en del mere kode, men det kan laves.
Dim objFolder, objFSO, f, strStartFolder
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strStartFolder = "C:\Program Files\Mail Enable\Postoffices" set objFolder = objFSO.getFolder(strStartFolder)
for each f in objFolder.subfolders ChkDelFolder(f) next
sub ChkDelFolder(IobjFolder) for each subFolder in IobjFolder.Subfolders if (subFolder.name="Deleted Items") or (subFolder.name="Sent Items") then subFolder.delete() 'msgbox folder else ChkDelFolder(subFolder) end if next end sub
set objFolder = nothing
strStartFolder="C:\Program Files\Mail Enable\Backup\Sets\Autoback\Store\Postoffices" set objFolder = objFSO.getFolder(strStartFolder)
for each f in objFolder.subfolders ChkDelFolder(f) next
Har også tænkt over det, men hvis jeg i stedet sletter dem via stifinder, så brokker programmet sig ikke (altså mailserveren) og serveren går heller ikke ned.
Ud over det er der tale om sendt og slettet post.
Jeg kan godt ikke afvise, at det er derfor at den går ned. Men så burde den bare gå ned, når jeg kører scriptet.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.