Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] CLI opdracht in leven houden

Pagina: 1
Acties:

Onderwerpen


  • Bjk
  • Registratie: Augustus 2002
  • Laatst online: 07:29
Excuses voor de vrij cryptische topic-titel, ik wist niet hoe ik het kort moest samenvatten.
To the point.

Op dit moment maak ik gebruik van een PHP script dat door middel van een fsockopen een verbinding met Twitter open zet. Twitter pusht op deze manier berichten naar mijn server. Wanneer je dit script in de browser draait zal het uiteindelijk timeouten. Dit gebeurd niet wanneer je het via de CLI uitvoert (wat ik nu doe).

Ik run mijn script nu via een (windows) test server met een xampp PHP installatie en voer het script zo uit in Windows command prompt (CMD):
code:
1
2
cd c:\xampp\php
php c:\xampp\htdocs\openstream.php


Vraag:
Dit gaat prima, mijn vraag: Wanneer ik de CMD sluit stopt mijn verbinding. Is er een mogelijkheid om deze stream ondanks het sluiten van mijn CMD toch open te houden?

Probleem:
Straks moet deze code gaan draaien op een linux machine waar ik toegang heb tot de PHP CLI via SSH.
Maar dit zou betekenen dat ik mijn SSH console open moet houden op mijn eigen pc om dit staande te houden?


Volgens mij maak ik ergens een denkfout / ik heb niet de technische knowhow om hier zelf een antwoord op te verzinnen. Iemand?

Verwijderd

Ik zie geen enkele reden in jouw post om de verbinding open te houden. HTTP is stateless, je kunt waarschijnlijk beter iets bouwen dat ook met stukjes informatie kan werken, bijvoorbeeld een pagina die met XMLHttpRequests kan worden geüpdated. Dat werkt vaak veel beter en soepeler over HTTP.

  • Bjk
  • Registratie: Augustus 2002
  • Laatst online: 07:29
Klopt in mijn verhaal zit geen reden, deze is er wel. Maar is niet direct relevant voor mijn vraag. Het komt erop neer dat ik mijn data niet wil pullen.

  • Noork
  • Registratie: Juni 2001
  • Niet online
Twitter zal dus moeten pushen, en dat doet Twitter niet. Ofwel, het gaat niet wat je zou willen.
Overigens, wat context zou handig zijn, misschien dat iemand dan wat beters te binnen schiet.

  • CyBeRSPiN
  • Registratie: Februari 2001
  • Nu online

CyBeRSPiN

sinds 2001

In unix: Zet een & achteraan je aanroep, dan wordt het een background process.
Heb je screen geinstalleerd? Dan kun je het in een screensessie draaien, kun je uitloggen terwijl het script doorloopt.

  • Bjk
  • Registratie: Augustus 2002
  • Laatst online: 07:29
@noork Twitter kan zeker wel pushen: https://dev.twitter.com/docs/streaming-api

@cyberspin top het & gebeuren ga ik testen. Wat betreft screensessien, kan ik dat installeren wanneer ik enkel ssh access heb tot de webserver (shared hosting omgeving) Nog 1 vraag? Hoe kill ik het & proces als ik dat toch op een bepaald moment zou willen?

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 20:59

Matis

Rubber Rocket

in de console: jobs, fg en kill zijn jouw vrienden ;)

Edit, in Windows zou je het ook als sceduled task of service kunnen draaien.

[ Voor 43% gewijzigd door Matis op 15-09-2011 21:04 ]

If money talks then I'm a mime
If time is money then I'm out of time


Verwijderd

Hoe ga je controleren of je proces nog wel draait, nog wel verbonden is en nog wel informatie krijgt?
Het lijkt misschien een goed idee om de informatie te laten streamen, maar het is heel wat ingewikkelder dan bijvoorbeeld gewoon regelmatig pollen.

Zeker gezien je ervaring met Linux zou ik daar voorlopig nog niet aan beginnen.

  • Phoenix1337
  • Registratie: April 2009
  • Laatst online: 26-11 16:28
Bjk schreef op donderdag 15 september 2011 @ 21:00:
@noork Twitter kan zeker wel pushen: https://dev.twitter.com/docs/streaming-api

@cyberspin top het & gebeuren ga ik testen. Wat betreft screensessien, kan ik dat installeren wanneer ik enkel ssh access heb tot de webserver (shared hosting omgeving) Nog 1 vraag? Hoe kill ik het & proces als ik dat toch op een bepaald moment zou willen?
In het geval van een debian gebasseerde variant:
apt-get install screen

Je kan dan het programma als volgt in een screen draaaien:
screen
php /path/to/script

of gelijk
screen php /path/to/script

Je kan dan je actieve screen naar de achtergrond brengen door ctrl+a+d te doen. Screen hervatten kan met "screen -r" met daarachter eventueel een pid mocht je meerdere screens open hebben staan.

Het process killen kan met een kill <pid> of je opent je screen en gebruikt ctrl + c. De screen zelf kan je dan stoppen door gewoon exit te doen.

[ Voor 7% gewijzigd door Phoenix1337 op 15-09-2011 21:27 ]


  • Bjk
  • Registratie: Augustus 2002
  • Laatst online: 07:29
@Matis bedankt ik ga dit opzoeken.

@cheetah Mijn ervaring hiermee is inderdaad beperkt, maar je moet ergens beginnen. Aangezien dit een hobby app word is het niet erg om wat trial en error werk te verrichten en zo ervaring op te doen. Polling is te traag, Twitter doet aan Rate Limiting waardoor ik 'slechts' 1 keer kan pollen per 24 seconden.

@Phoenix Bedankt ik ga hiermee aan de slag, dit klinkt veel belovend. Vraag mij alleen af of je zomaar het programma op een shared hosting omgeving kan installeren.

  • Phoenix1337
  • Registratie: April 2009
  • Laatst online: 26-11 16:28
Heb je daar überhaupt toegang tot de cli ?

  • Bjk
  • Registratie: Augustus 2002
  • Laatst online: 07:29
@phoenix Yes, dat had ik al wel getest :)

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 09-11 14:42
Ik kan je alvast vertellen dat je daar met Shared Hosting geen toegang tot zal hebben.
edit: dan bedoel ik apt-get e.d., processen killen mag misschien (vaak ook al niet), maar dan wel alleen van je eigen gebruiker

[ Voor 42% gewijzigd door wjzijderveld op 20-09-2011 14:19 ]

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II


Verwijderd

Voor windows heb je wel een aantal tools om processen op de achtergrond te draaien ... bgrun is er een van die ik ken maar daarna heb je meestal geen controle meer over dat proces, behalve in de taskmanager.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Screen is de tool voor dit soort dingen op linux omgevingen. Heb ik vroeger wel eens gebruikt om wat counterstrike servers mee te draaien.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

Doe hetzelfde hier met screen en rtorrent.

Niks handiger dan screen of een andere multiplexer over SSH trouwens. O+

[ Voor 47% gewijzigd door Borromini op 21-09-2011 12:14 ]

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje


  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Bovenaan je code:
PHP:
1
2
3
4
5
6
7
8
<?php
$pid = pcntl_fork();
if ( $pid > 0 ) {
   echo 'Running on pid: ' .$pid .PHP_EOL;
   exit;
}

// De rest van je code hier


Dan vervolgens gewoon via de CLI:
Starten:
php [bestandsnaam].
En stoppen:
kill [pid]

  • Stilgar
  • Registratie: Maart 2002
  • Niet online
Matis schreef op donderdag 15 september 2011 @ 21:02:
in de console: jobs, fg en kill zijn jouw vrienden ;)
Gaat niet werken als je uit wilt kunnen loggen. Screen is een optie. Een eenvoudigere oplossing is het nohup commando. Werkt standaard op bijna iedere distributie.
Pagina: 1