[PHP] script aanroepen op de achtergrond

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Weet iemand of het mogelijk is en zo ja hoe je een linux shell commando kan aanroepen en dan vervolgens op de achtergrond verder te laten uitvoeren. Ik weet wel dat je met exec(); een commando kan aanroepen, maar dan wacht hij tot hij klaar is en dan gaat hij pas verder met de php pagina.

Het is namelijk de bedoeling om DVD's te branden vanuit een php pagina. Het branden moet dan gestart worden maar omdat dit natuurlijk een tijdje duurt moet de php pagina er al mee stoppen.

Alvast bedankt ;)

[ Voor 14% gewijzigd door Verwijderd op 28-01-2004 10:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dit is erg basic.. Als je een & achter je command zit wordt dit door bash geinterpreteerd als "draai op de achtergrond", vervolgens gebruik je de PHP command line interpreter om je script te starten.
code:
1
# /some/where/php -f script.php &

En klaar is Theorist..
Dit had je zelf ook op kunnen zoeken :)

edit:

Hoort overigens ook in NOS thuis..

[ Voor 11% gewijzigd door Verwijderd op 28-01-2004 10:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat weet ik wel en heb ik al geprobeerd, maar hij blijft gewoon wachten totdat hij klaar is met het uitvoeren ervan!!

[ Voor 12% gewijzigd door Verwijderd op 28-01-2004 10:48 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Eventjes for the record: je draait je script vanaf de command line of gebruik je exec(); binnen een ander script om een nieuw script aan te roepen?
Of gebruik je exec(); binnen je PHP script en wil je dat dat commando op de achtergrond draait en je script zelf niet?

In het laatste geval kan dat ook niet, want exec() geeft de stdout van dat programma terug in een string (meen ik).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 28 januari 2004 @ 10:50:
Eventjes for the record: je draait je script vanaf de command line of gebruik je exec(); binnen een ander script om een nieuw script aan te roepen?
Of gebruik je exec(); binnen je PHP script en wil je dat dat commando op de achtergrond draait en je script zelf niet?

In het laatste geval kan dat ook niet, want exec() geeft de stdout van dat programma terug in een string (meen ik).
Ik doe dus bijv. shell_exec("locate a"); (een & maakt geen verschil). Dan is hij een tijdje bezig en als hij klaar is gaat hij pas verder met het PHP script.
Ik wil dus dat hij het commando start (en doorloopt) en dan gelijk weer verder gaat met het PHP script... :p

Dus in de praktijk als je een dvd wil branden geeft het php script een commando dat de dvd gaat branden en dat het php script verder gaat en dus niet blijft wachten opdat de dvd klaar is.

[ Voor 17% gewijzigd door Verwijderd op 28-01-2004 11:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ook dit is geen probleem ;)
Maak gewoon een bash scriptje van de vorm:
code:
1
2
#!/bin/bash
/prog/wat/je/wil/draaien --paramater optie meuk &

Roep deze aan in je PHP script en Theorist is echt klaar :)

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Probeer exec in plaats van shell_exec
In order to execute a command have have it not hang your php script while it runs, the program you run must not output back to php. To do this, redirect both stdout and stderr to /dev/null, then background it.

> /dev/null 2>&1 &

In order to execute a command and have it spawned off as another process that is not dependent on the apache thread to keep running (will not die if somebody cancels the page) run this:

exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');
http://nl3.php.net/manual/nl/function.exec.php

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanx. Mijn dank ik groot _/-\o_ 8)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Misschien kun je ook wel iets met ini set en allow user abort. Dan kun je het venster sluiten en loopt de pagina gewoon door.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

djluc schreef op 28 januari 2004 @ 11:29:
Misschien kun je ook wel iets met ini set en allow user abort. Dan kun je het venster sluiten en loopt de pagina gewoon door.
Je krijgt wel te maken met twee problemen
• De pagina stopt niet met laden!
• Je te maken krijgt met een geheugen limit die standaard op maximaal 8 Mb staat

Programmer - an organism that turns coffee into software.

Pagina: 1