webForumDet fria alternativet

Mail script

Programmering

8 svar · 179 visningar · startad av cya

Medlem sedan okt. 200010 inlägg
Frågan#1

Hej alla!

Jag tänkte göra ett mailing list script. med standard funktioner som ta in mail adresser och kunna skicka ut mail genom ett webb gränsnitt.

Jag funderar på en sak, om jag initierar en process på servern, hur kan jag förhindra att den inte dör ut?

Hur länge väntar browsern på respons innan den gör "time out"?

Ex. Om jag tänkt att skicka ut 1000 mail till abonenterna, hur gör jag smartast?

Tacksam för alla tankar och synpunkter!

//Cya

[Redigerat av cya den 28 feb 2001]

Medlem sedan juni 20004 308 inlägg
#2

Kör du på en windows-plattform kan du "fuska" genom att använda kommandot "start" för att starta en ny process utan att vänta på att den gamla. Annars bör du kunna använda perls "fork" för att fixa detta. Hänvisar till perl.com's doc; http://www.perl.com/pub/doc/manual/html/pod/perlfunc/fork.html

------------------

/ J

Medlem sedan dec. 199954 inlägg
#3

Om du kör unix server så finns ju nohup kommandot...

Medlem sedan okt. 200010 inlägg
#4

Hej!

Jojoxx:
Tack för länken.

Marley:
Tror att jag försöker med fork, vill försöka vara så plattforms oberoende som möjligt.

Jag har pulat ihop lite kod, tror ni det kommer att fungera bra?
Vad annars bör jag tänka på?

Tacksam för responsen!

//Cya

my $pid = fork();

if ($pid) {
        # Förälder
        print "Content-type: text/html\n\n";
	print "Ditt utskick håller på att skickas ut.\n";
        exit(0);
}
else {
        # Barnet

        # .. Mail funktioner ..
}
Medlem sedan apr. 2000642 inlägg
#5

hmm... dör inte barnet om föräldern dör?

samt att webservern dödar alla kvarblivna processer om de inte är klara efter typ 30 sekunder eller så...

jag skulle göra så att programmet skriver en köfil som sedan ett annat program (aktiveras med cron?) tar och processar var 10:e minut eller så.

------------------
PeterSign v 2.3.36

Medlem sedan okt. 200010 inlägg
#6

webservern dödar alla kvarblivna processer om de inte är klara efter typ 30 sekunder eller så

Ajaj, det hade jag inte räknat med ;)
Någon mer som har kännedom om detta?

/Cya

Medlem sedan juni 20004 308 inlägg
#7

webservern dödar alla kvarblivna processer om de inte är klara efter typ 30 sekunder eller så...

Tanken var att skapa en så kallad zombie. Jag tolkar det som en child utan parent som således borde "överleva" webservern. Start fungerar bra på win32 för detta, så jag har inte använt fork, men jag tycker en zombie låter som precis det man behöver. (Även om de inte är snälla).

------------------

/ J

Medlem sedan okt. 200010 inlägg
#8

Peter_B har rätt, webservern dödar barnet.

Jag har testat på Apache/1.3.12 (Unix) och där dör barnet direkt, fast processen går under 30 sekunder.

På Apache/1.3.17 (Win32) så får inte browsern någon respons förän barnet är färdigt.

På IIS 4 (NT4) så är fork tydligen inte implementerat.

Finns det inga andra sätt att starta en process utan att behöva vänta på den?
Det verkar som man får skippa det där men plattforms oberoende, eller?

/Cya

Koden som jag testat med:

#!/usr/bin/perl -w

use strict;

my $pid = fork();

if ($pid) {
	# Föräldern
	print "Content-type: text/html\n\n";
	print "...process...\n";
	exit(0);
}
else {
	# Barnet

	close (STDOUT);

	sleep 60;

	open(DATA,">child.txt");
	flock(DATA,2);

	for (my $i = 0; $i <= 1000; $i++) {
		print DATA "$i\n";
	}

	flock(DATA,8);
	close(DATA);
	chmod(0666,"child.txt");

	exit;
}
Medlem sedan juni 20004 308 inlägg
#9

Ok, då missuppfattade jag innebörden med en child zombie.

Dock är fork en funktion i perl och har ingenting med vilken webserver du använder. Har du testat det på olika maskiner kan det skilja på perl-version. Jag tror fork har tillkommit rätt sent på för Win32 (Active Perl).

De plattformsberoende alternativen är cron/crontab för Unix eller "at" för WinNT (detta för att schemalägga aktiviteter). Men på windowsplattformar fungerar som sagt start lika bra, eller bättre i ditt fall.

------------------

/ J

248 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)