[PHP] Script in background starten.

Pagina: 1
Acties:

  • Gilles
  • Registratie: Februari 2000
  • Laatst online: 28-07-2025
Hoi,
Ik ben bezig met php een mailinglist systeempje te bakken. Nu heb ik het zo gedaan dat ik een php console proces kan starten dat alle mailtjes verstuurd. Nu heb ik dit gewoon gedaan door in mijn mailer.php (dat via browser wordt aangeroepen) het volgende te zetten:
PHP:
1
2
3
<?
exec("/home/blaat/blaat/blaat/console_mailer.php 1>/dev/null 2>/dev/null &amp;"); 
?>

(Ik heb deze methode in het verleden al vaker met succes gebruikt maar deze keer werkt het gewoon niet)
(Op de eerste regel van die console_mailer.php staat dus #!/usr/local/bin/php -q)
Maar wat blijkt nu: niet het console_mailer script wordt door php geparsed, maar het webscript die in de browser wordt bekeken (in dit geval dus mailer.php). Ik begrijp er echt helemaal niks meer van. Ik ben zelfs al zo ver gegaan dat ik met "at" en proces geplant heb om over 1 minuut te staren. Als ik dat via console doet werkt het perfect. Maar als ik dit via web doe, komt hij ook netjes in de atqueue te staan maar voert gewoon weer doodleuk dat webscript uit ipv mijn console_mailer.php.

Ik draai dit alles met apache en php mbv suexec. Deze werkt ook gewoon echt onder de user die rechten heeft tot het script dus daar ligt het (denk ik) ook niet aan. Ik snap er helemaal niks meer van. :( :(

  • Gilles
  • Registratie: Februari 2000
  • Laatst online: 28-07-2025
Kheb het zelf al gevonden. Voor als het iemand nog ooit mocht interesseren: er werden een hoop envirement vars meegegeven waardoor php dacht dat ie vanuit apache gexect werd (in die vars zat ook filename van dat andere script). Al die vars unsetten deed wonderen.

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 17:27

Kees

Serveradmin / BOFH / DoC
Wat je probleem is (denk ik) is dat je script wordt afgebroken zodra de request klaar is. probeer eens:

ignore_user_abort(true);

aan te zetten?
En uiteraard: set_time_limit(0);

Je kunt tuurlijk ook een logfile aanmaken, en een shutdown functie registreren zodat je, zodra het script stopt kan weten waar hij was (door een print_r($GLOBALS) weg te scrijven en afentoe dmv van variables aangeven waar hij was)

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan