[php] batch job gestart vanuit php blokkeert apache

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In een php script (r_norm.php) start ik een batch shellscript in de achtergrond met de volgende code
code:
code:
1
2
3
4
5
6
7
8
9
run = ("/home/test/www/cgi-bin/R/runnorm.sh $session_follow '$barcode' $normtype $species '$profile' '$username'");
 shell_exec ("nohup $run > /dev/null &");
 flush();
 
 echo "<p><a href=\"/test/uploads.php\"><b>Click here to view your uploads and data sets.</a></b><br>";
 echo "<p><a href=\"/test/r_norm.php\"><b>Click here to upload another dataset.</a></b></p>";
 
 flush();
 exit();


Het shell script start een aantal berekeningen in perl die enige minuten duren.
Aan het eind schrijft het perl script de resultaten naar een MySQL database die gereviewed kunnen worden in (uploads.php). So far so good, na het shell_exec command verschijnt de link naar de overview pagina en zie ik de batchjob lopen op de server.

Nu komt het probleem. Als ik de overview pagina (uploads.php) wil bekijken, dan wacht de server totdat de batchjob is afgelopen. Als ik een willekeurige andere (php) pagina wil bekijken dan wordt die pagina wel door de server geleverd. Ik heb geen idee waarom die éne php pagina (uploads.php) wacht op een batchjob dat in de achtergrond loopt en alle andere pagina's niet.

als ik naar de lopende processen kijk dan zie ik de batchjob starten op 1 processor. De tabel in Mysql is niet gelocked tijdens de berekening.

server: dual xeon/Apache 1.3.28/php 4.1.2/MySQL 4.x
netwerk: 100 Mbit

Acties:
  • 0 Henk 'm!

  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 27-08 11:32
ik zie nergens in de opdrachtregel voor de shell dat het proces op de achtergrond moet draaien. dus aan het eind van je opdracht een '&'.

UPDATE:
oeps, heb je dus wel gedaan!

[ Voor 18% gewijzigd door Mickman op 25-06-2004 14:57 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 25 juni 2004 @ 14:36:
In een php script (r_norm.php) start ik een batch shellscript in de achtergrond met de volgende code
code:
code:
1
2
3
4
5
6
7
8
9
run = ("/home/test/www/cgi-bin/R/runnorm.sh $session_follow '$barcode' $normtype $species '$profile' '$username'");
 shell_exec ("nohup $run > /dev/null &");
 flush();
 
 echo "<p><a href=\"/test/uploads.php\"><b>Click here to view your uploads and data sets.</a></b><br>";
 echo "<p><a href=\"/test/r_norm.php\"><b>Click here to upload another dataset.</a></b></p>";
 
 flush();
 exit();
Hoe maak je verbinding met de MySQL server? Maak je gebruik van een "persistant connection", kan het zijn dat hij dezelfde verbinding wil gebruiken als de perl script ( Wild guessing )

Wat voor een tabellen zijn het?
Hoeveel data ben je aan het toevoegen in de shell script?

[ Voor 30% gewijzigd door LuCarD op 25-06-2004 15:01 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nope, ik gebruik expres geen persistent connection. Ik denk dat ik het inmiddels wel gevonden heb, maar dan moet ik eerst de systeembeheerder vragen of hij een nieuwe versie van PHP installeerd die pcntl_fork() wél ondersteunt.

Aan het eind van het (perl script wordt er 1 regel aan een tabel toegevoegd met slechts enkele varchars.
Deze worden weergegeven door het overview php script en zouden dus onafhankelijk van elkaar moeten werken.

[ Voor 33% gewijzigd door Verwijderd op 25-06-2004 15:10 ]