webForumDet fria alternativet

Mail script

8 svar · 177 visningar · startad av cya

cyaMedlem sedan okt. 200010 inlägg
#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]

JojoxxMedlem sedan juni 20004 306 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

MarleyMedlem sedan dec. 199957 inlägg
#3

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

cyaMedlem 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 ..
}
Peter_BMedlem sedan apr. 2000595 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

cyaMedlem 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

JojoxxMedlem sedan juni 20004 306 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

cyaMedlem 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;
}
JojoxxMedlem sedan juni 20004 306 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

Genererad på 387 ms · cache AV · v20260730165559-full.f96bc7eb