Er is een database met 3 waarden : GSMnummer, bericht en send. GSM nummer en bericht spreken voor zichzelf, send is gewoon een waarde 0 (nog niet verzonden) of 1 (bericht verzonden). Elk bericht dat in de database komt, krijgt dus automatisch bij send de waarde 0.
Nu zou er een PHP script moeten komen dat in de database kijkt of er berichten staan waarbij send op 0 staat, zo ja verstuurd hij dat bericht en zet hij send op 1.
Het versturen van een bericht duurt ongeveer 7 seconden. Per minuut kan je dus 4 berichten versturen.
Vraag : hoe kan ik er voor zorgen dat deze database elke 15 seconden "bekeken" word naar berichten die op 0 staan? Crontab kent enkel minuten als laagste waarde. In PHP kan ik werken met sleep, maar als ik voor één of andere reden de server moet rebooten (of de vm) dan mag ik niet vergeten het script op te starten. Zoek dus eigenlijk iets dat ik eenmalig kan goed zetten en voor de rest weinig omkijk naar heb...
PHP script vraagje
-
- Moderator
- Berichten: 19634
- Lid geworden op: 07 nov 2006, 12:11
- Twitter: kriskenbe
- Locatie: Massemen - 91WET0
- Uitgedeelde bedankjes: 1863 keer
- Bedankt: 1003 keer
- Contacteer:
Internet = Orange 100/10Mbps + WirelessBelgië
Telefonie = EDPnet + OVH
GSM = Orange Go Extreme + Scarlet Red
TV = TVV App + Netflix + Disney+ + Streamz
Netwerk = Mikrotik + Ubiquiti
-
- Elite Poster
- Berichten: 6659
- Lid geworden op: 20 jun 2016, 18:36
- Uitgedeelde bedankjes: 18 keer
- Bedankt: 386 keer
Met sleep kan dit toch? Maar niet in PHP, laat cron elke minuut een shell script draaien :
php-script
sleep 15
php-script
sleep 15
php-script
sleep 15
php-script
Na reboot zal het weer beginnen draaien vanaf de eerstvolgende minuut na het opstarten van crond.
php-script
sleep 15
php-script
sleep 15
php-script
sleep 15
php-script
Na reboot zal het weer beginnen draaien vanaf de eerstvolgende minuut na het opstarten van crond.
-
- Moderator
- Berichten: 19634
- Lid geworden op: 07 nov 2006, 12:11
- Twitter: kriskenbe
- Locatie: Massemen - 91WET0
- Uitgedeelde bedankjes: 1863 keer
- Bedankt: 1003 keer
- Contacteer:
Je zou dus cron en sleep combineren met elkaar?
00:00:00 Cron
00:00:15 Sleep
00:00:30 Sleep
00:00:45 Sleep
00:01:00 Cron
00:01:15 Sleep
00:01:30 Sleep
00:01:45 Sleep
...
Hmm dat kan inderdaad ook. Gewoon 3x een sleep inbouwen.
00:00:00 Cron
00:00:15 Sleep
00:00:30 Sleep
00:00:45 Sleep
00:01:00 Cron
00:01:15 Sleep
00:01:30 Sleep
00:01:45 Sleep
...
Hmm dat kan inderdaad ook. Gewoon 3x een sleep inbouwen.
Internet = Orange 100/10Mbps + WirelessBelgië
Telefonie = EDPnet + OVH
GSM = Orange Go Extreme + Scarlet Red
TV = TVV App + Netflix + Disney+ + Streamz
Netwerk = Mikrotik + Ubiquiti
-
- Member
- Berichten: 72
- Lid geworden op: 09 maa 2018, 23:13
- Uitgedeelde bedankjes: 6 keer
- Bedankt: 11 keer
Eleganter is om alle instructies binnen het PHP script in een oneindige lus te plaatsen :
De uitvoering binnen het script kan ook met sleep(...) worden gepauzeerd, met ... het aantal seconden.
Code: Selecteer alles
while(true)
{
Alle instructies
}
Slakkenpost en gevederde luchtkoeriers zijn mijn favoriete communicatiemiddelen.
-
- Moderator
- Berichten: 19634
- Lid geworden op: 07 nov 2006, 12:11
- Twitter: kriskenbe
- Locatie: Massemen - 91WET0
- Uitgedeelde bedankjes: 1863 keer
- Bedankt: 1003 keer
- Contacteer:
Een lus is volgens mij net niet de oplossing? Ik moet dan telkens als de server opgestart is er aan denken om dat zelf te starten. En als ik een cronjob doe en een lus tegelijk dan gaan die in elkaars weg lopen.
Internet = Orange 100/10Mbps + WirelessBelgië
Telefonie = EDPnet + OVH
GSM = Orange Go Extreme + Scarlet Red
TV = TVV App + Netflix + Disney+ + Streamz
Netwerk = Mikrotik + Ubiquiti
-
- Elite Poster
- Berichten: 3202
- Lid geworden op: 05 dec 2010, 15:09
- Bedankt: 451 keer
Code: Selecteer alles
while(true)
{
#Alle instructies
sleep 15;
}
Moet je geen check doen of het script "uniek draait" (pid file) enzo, anders lopen die in elkaars weg.
-
- Elite Poster
- Berichten: 1573
- Lid geworden op: 27 apr 2019, 06:52
- Uitgedeelde bedankjes: 36 keer
- Bedankt: 70 keer
Een cronjob kan je ook eenmalig uit voeren bij het opstarten.
Bijvoorbeeld 45 seconden na de reboot zodat andere zaken eerst netjes kunnen gestart worden.
=========================
Wat ook kan.
Een eenmalig, via crontab, uitgevoerd script (respawn.sh) kan monitoren of het uit te voeren programma (simplescript.sh) nog draait (en indien nodig terug opstarten).
Het aantal seconden bepaal je in beide gevallen zelf.
(In onderstaand voorbeeld: opstarten van "respawn.sh" 45 seconden na reboot en deze gaat dan iedere 5 seconden controleren of "simplescript.sh" nog draait).
Bijvoorbeeld crontab:
Met respawn.sh:
Bron respawn.sh
Bijvoorbeeld 45 seconden na de reboot zodat andere zaken eerst netjes kunnen gestart worden.
Code: Selecteer alles
@reboot sleep 45; /path/to/simplescript.sh
Wat ook kan.
Een eenmalig, via crontab, uitgevoerd script (respawn.sh) kan monitoren of het uit te voeren programma (simplescript.sh) nog draait (en indien nodig terug opstarten).
Het aantal seconden bepaal je in beide gevallen zelf.
(In onderstaand voorbeeld: opstarten van "respawn.sh" 45 seconden na reboot en deze gaat dan iedere 5 seconden controleren of "simplescript.sh" nog draait).
Bijvoorbeeld crontab:
Code: Selecteer alles
@reboot sleep 45; /path/to/respawn.sh /path/to/simplescript.sh 5
Code: Selecteer alles
#!/bin/bash
# This script is a simple respawn deamon for those of us who dont want
# to deal with the /etc/event.d, monit etc...
# Usage: sh respawn.sh [program] [sleep time]
while [ true ]
do
sleep $2
if ps ax | grep -v grep | $1 > /dev/null
then
echo $1": Stopped. Restarting in "$2" seconds."
else
$1 &
fi
done
-
- Elite Poster
- Berichten: 6659
- Lid geworden op: 20 jun 2016, 18:36
- Uitgedeelde bedankjes: 18 keer
- Bedankt: 386 keer
Reden dat ik niet alles in PHP wil zetten is dat het volledig gedaan is als het proces crasht om een of andere reden. crond is veel betrouwbaarder dan gelijk welke PHP interpreter.
Je kan idd wel die 3 sleep's in het PHP script zetten ook en cron elke minuut het PHP script laten firen, dat is minder belastend voor het systeem dan elke 15 seconden het script te firen. Het hangt af van hoe goed het PHP script geschreven is en hoeveel tolerantie er is om eventueel eens enkele keren geen check te hebben na 15s.
Je kan idd wel die 3 sleep's in het PHP script zetten ook en cron elke minuut het PHP script laten firen, dat is minder belastend voor het systeem dan elke 15 seconden het script te firen. Het hangt af van hoe goed het PHP script geschreven is en hoeveel tolerantie er is om eventueel eens enkele keren geen check te hebben na 15s.
-
- Elite Poster
- Berichten: 3202
- Lid geworden op: 05 dec 2010, 15:09
- Bedankt: 451 keer
@CCatalyst: de ene keer kan de uitvoering 30 sec duren, de andere keren 40min.... Als er een hele sms run is.
Dus als je niet een heel framework en checks er rond wilt schrijven of het al draait of niet is het eenvoudiger in een oneindige loop.
Heb zo voor mijn bel thuis eentje in php draaien, al langer dan een jaar. Voor eenvoudige dingen geen probleem
Dus als je niet een heel framework en checks er rond wilt schrijven of het al draait of niet is het eenvoudiger in een oneindige loop.
Heb zo voor mijn bel thuis eentje in php draaien, al langer dan een jaar. Voor eenvoudige dingen geen probleem