Toon posts:

Hoe kan een script om de x tijd laten runnen?

Pagina: 1
Acties:
  • 206 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Met PHP dus. Ik heb een script dat ik ongeveer om het uur wil uitvoeren. Wel geautomatiseerd dus, dat het uit zichzelf start. Hoe kan ik dit doen? Of is dit niet mogelijk met PHP?

Verwijderd

Weet het niet precies, maar volgens mij moet je eens naar de cron() functie voor LINUX kijken....

Verwijderd

je moet waarschijnlijk met crontab gaan werken, ik heb er geen verstand van, ik haal hem er namelijk altijd uit omdat ik een hekel heb aan getimede dingen

ik zou eens
man crontab
intikken of naar
/etc/crontab/
gaan, suc6

Verwijderd

Topicstarter
Hmm, ik zit thuis op win98. De server is Linux. Hoe kan ik nu thuis testen of het überhaupt wel werkt, zonder het script gelijk naar de server te uploaden? Is er ook een mogelijkheid om een simpel proggie te gebruiken/maken om dit te doen (windows bv gaat ook je disk opruimen om de zoveel tijd, wel irritant, maar het werkt)?

  • $tranger
  • Registratie: Januari 2000
  • Laatst online: 27-07 01:19
Ik zelf draai dus een win98/omnihttpd/php3 server, en wat ik zou doen is gewoon in basic een proggie writen wat je php.exe aanroept. bijv:

c:\php3\php.exe c:\webroot\index.php

dit werkt wel, maar heb geen idee hoe dat in linux moet

suxez!

Verwijderd

Topicstarter
Ok, ik heb, heel vroeger, op de commodore 64 wel wat Basic gedaan (GW-BASIC volgens mij). Kan ik dan wel gewoon SLEEP x-seconden als programma maken? Wacht hij dan gewoon x-sec, en gaat dan verder, of telt hij gewoon elke seconde of die x-seconden al voorbij zijn (CPU-load). Nog iets, als je bij een SLEEP op enter drukt, stopt hij met SLEEPEN, hoe kan ik dit voorkomen?

Sorry hoor, maar BASIC is al lang uit mijn hoofd (deels). Ik ken echt nog alleen maar wat basis zooi (IF-THEN, heel leuk gedaan. En natuurlijk het onvolprezen GOTO!!!).

Groeten,

Thijs

Verwijderd

Ik zit met hetzelfde probleem, ik heb net even naar die manual van crontab gekeken maar daar wordt ik niet veel wijzer van, ik zie niks staan dat met tijdstippen te maken heeft.

  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 28-07 15:42

RvdH

Uitvinder van RickRAID

NAME
crontab - manipulate per-user crontabs (Dillon's Cron)

SYNOPSIS
crontab file [-u user] - replace crontab from file

crontab - [-u user] - replace crontab from stdin

crontab -l [user] - list crontab for user

crontab -e [user] - edit crontab for user

crontab -d [user] - delete crontab for user

crontab -c dir - specify crontab directory

DESCRIPTION
crontab manipulates the crontab for a particular user.
Only the superuser may specify a different user and/or
crontab directory. Generally the -e option is used to edit your crontab. crontab will use /usr/bin/vi or the
editor specified by your VISUAL environment variable to
edit the crontab.

Unlike other crond/crontabs, this crontab does not try to
do everything under the sun. Frankly, a shell script is
much more able to manipulate the environment then cron and
I see no particular reason to use the user's shell (from
his password entry) to run cron commands when this
requires special casing of non-user crontabs, such as
those for UUCP. When a crontab command is run, this
crontab runs it with /bin/sh and sets up only three envi-
ronment variables: USER, HOME, and SHELL.

crond automatically detects changes in the time. Reverse-
indexed time changes less then an hour old will NOT re-run
crontab commands already issued in the recovered period.
Forward-indexed changes less then an hour into the future
will issue missed commands exactly once. Changes greater
then an hour into the past or future cause crond to resyn-
chronize and not issue missed commands. No attempt will
be made to issue commands lost due to a reboot, and com-
mands are not reissued if the previously issued command is
still running. For example, if you have a crontab command
'sleep 70' that you wish to run once a minute, cron will
only be able to issue the command once every two minutes.
If you do not like this feature, you can run your commands
in the background with an '&'.

The crontab format is roughly similar to that used by vix-
iecron, but without complex features. Individual fields
may contain a time, a time range, a time range with a skip
factor, a symbolic range for the day of week and month in
year, and additional subranges delimited with commas.
Blank lines in the crontab or lines that begin with a hash
(#) are ignored. If you specify both a day in the month
and a day of week, the result is effectively ORd... the
crontab entry will be run on the specified day of week and
on the specified day in the month.

# MIN HOUR DAY MONTH DAYOFWEEK COMMAND
# at 6:10 a.m. every day
10 6 * * * date

# every two hours at the top of the hour
0 */2 * * * date

# every two hours from 11p.m. to 7a.m., and at 8a.m.
0 23-7/2,8 * * * date

# at 11:00 a.m. on the 4th and on every mon, tue, wed
0 11 4 * mon-wed date

# 4:00 a.m. on january 1st
0 4 1 jan * date

# once an hour, all output appended to log file
0 4 1 jan * date >>/var/log/messages 2>&1


The command portion of the line is run with /bin/sh -c
<command> and may therefore contain any valid bourne shell
command. A common practice is to run your command with
exec to keep the process table uncluttered. It is also
common to redirect output to a log file. If you do not,
and the command generates output on stdout or stderr, the
result will be mailed to the user in question. If you use
this mechanism for special users, such as UUCP, you may
want to create an alias for the user to direct the mail to
someone else, such as root or postmaster.

Internally, this cron uses a quick indexing system to
reduce CPU overhead when looking for commands to execute.
Several hundred crontabs with several thousand entries can
be handled without using noticable CPU resources.

BUGS
Ought to be able to have several crontab files for any
given user, as an organizational tool.

AUTHOR
Matthew Dillon (dillon@apollo.west.oic.com)

1 May 1994 1
Dat wat in het bold staat gaat het om. Dus wat doe je nou? Dit: `crontab -e`, dan start (waarschijnlijk) vi op. Je kan dan je crontab editten, en een line zoals in het tweede dikgedrukte gedeelte toevoegen. Als je de weg niet kent in vi kan je `:h` intikken als je in vi zit, of op de shell `VISUAL=joe` (als je joe fijn vind, of anders pico), en dan `export VISUAL`. Als je vervolgens `crontab -e` intikt, kan je de crontab editten met joe danwel pico.

Verwijderd

En voor onder windows heb je Winat. Doet hetzelfde als crond.

nu zou het toch wel moeten lukken dacht ik zo... ;)

Verwijderd

Is het niet mogelijk met een tijdfunctie en een if vergelijking dit uit te voeren?

zoiets als

$nu = date("j-m-y");

if ($nu == "datum zoals in de bovenstaande formatering") {
print ("doe eens gek");
} else {
print ("vandaag maar niet");
}

misschien?

  • PaneVino
  • Registratie: April 2000
  • Laatst online: 14-10-2025
je zou ook gewoon die url eens in het uur op kunnen halen met lynx .... en dat uiteraard via crontab gestart ...

0 */1 * * * lynx [url="http://localhost/tijddingetje.php3"]http://localhost/tijddingetje.php3[/url] >/dev/null 2>&1


zoiets zeg maar

// PaneVino \


Verwijderd

Merten> Als je het zo zou doen zou je dat scripje constant moeten laten draaien en constant de datum moeten laten checken, terwijl je daar allemaal mooie progjes zoals crond() en atd voor hebt...

Panevino> Dat kan je dus beter direct doen, hoef je dat script niet per se in je www root te zetten.
Dat wordt dus iets als:
0 */1 * * * /usr/bin/php /scripts/tijddingetje.php3 >/dev/null 2>&1

  • PaneVino
  • Registratie: April 2000
  • Laatst online: 14-10-2025
The Daan> ig ging er even vannuit dat ern geen php binary was maar dat dat ding als module in apache gebakken zat .. een default redhat/suse linux install situatie zeg maar ... leek me hier een redelijk veilige aanname...

// PaneVino \


Verwijderd

In je php-config staat ergens een maximale executie-tijd ingesteld voor je scriptjes (dit o.a. om problemen met oneindige loopjes te voorkomen). Je kan dus je scriptje niet een paar uur laten 'slapen' (tenzij je die maximale executietijd op een paar uur zet, maar dat wil je niet...)
Crontabs gebruiken dus.

Verwijderd

Panevino> zit wat in... :)

Tieske> lijkt me dat je nu toch echt wel genoeg info hebt...toch?

Ik heb zelf 3 scripjes via een crontab lopen, en die doen dat perfect op de ingestelde tijd.

Verwijderd

Topicstarter
Dus wat kan ik nou het beste gebruiken? Crontabs zijn dus niet beschikbaar op een win98 bak, WinAT maakt gebruik van AT commands, en volgens die site zit dat alleen bij windows NT, en is dus ook onbruikbaar? Is er niet gewoon een of ander simpel progje voor? Ik heb nu ClockMan95, en daarmee kan je wel iets laten runnen om de zoveel tijd.

Ik zit alleen met een probleem. Ik kan een .php3 script alleen goed laten uitvoeren als ik [url="http://localhost/script.php3"]http://localhost/script.php3[/url] in de browser pleur. Met de progjes die ik heb getest opent hij (pad aangeven) C:\Program Files\Apache blablabla\script.php3, wat niet als php3 script herkend wordt en dus geen fatsoenlijk output geeft. Waarschijnlijk omdat dit niet via Apache gaat dus...

Hoe kan je trouwens met een commando een URL in IE laden? Bijvoorbeeld iexplore.exe "http://localhost/script.php3" of iets dergelijks, of is dit niet mogelijk?

Verwijderd

Commando voor het uitvoeren van een scripje:
c:\php3\php.exe c:\path_to_script\script.php3

Oftewel, je moet die scripjes met je php.exe aanroepen, zoals hierboven staat. Je webserver doet dat automatisch zodra die een php script voor zijn neus krijgt...

Verwijderd

Topicstarter
Da's wel leuk verder, maar dan krijg ik de output in een DOS-box te zien! Wat heb ik nou weer verkeerd gedaan!

Ik heb dus:
c:\php3\php.exe c:\Progra~1\Apache~1\Apache\htdocs\ht.php3

Die ~1 omdat php anders de dir niet kan vinden. Typ ik dit in start/uitvoeren of gewoon gelijk in de dos-box, krijg ik de HTML output die ik wil, maar in de DOS-box. Ik wil dit dus naar de browser sturen! Wat moet ik hiervoor aanpassen/had ik al moeten aanpassen/doe ik fout?

En heeft dit met browscap te maken? Ik weet eigenlijk mijn god niet wat dat doet, maar er zit iets met 'brows' in -> browser -> internet??

  • $tranger
  • Registratie: Januari 2000
  • Laatst online: 27-07 01:19
Browscap.ini is een database'je met gegevens over de browser waaraan ie precies kan zien welke broswer/platform/versie etc je gebruikt. Check maar eens in www.boerman.eu.org/zooi/browscap.ini

  • $tranger
  • Registratie: Januari 2000
  • Laatst online: 27-07 01:19
Trouwens het simpelste antwoord op deze vraag is: zet een browser aan op je server met een site met een refresh van 3600 seconden (1 uur), zoiets:

<html><head><meta http-equiv="Refresh" content="3600;URL=index.php"></head><body>
<?

php code

?>
</body></html>


Dat niemand hier aan gedacht heeft :)

  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 28-07 15:42

RvdH

Uitvinder van RickRAID

Daar is al wel aan gedacht, en meerdere keren is er laten zien dat dat de oplossing niet was.

Verwijderd

hmmm, dus je wilt via een schedule commando elk uur ofzo je browser op laten starten met dat php script.....

nuttig!!

Ik snap nu ff niet meer wat je nou eigenlijk wilt.

  • $tranger
  • Registratie: Januari 2000
  • Laatst online: 27-07 01:19
nee, je laat je browser gewoon aanstaan en hij start ieder uur het script omdat de pagina dan herlaadt.

Verwijderd

Topicstarter
Wat ik wil is dat bijvoorbeeld om het uur een php(3) script wordt gerunned. De browser hoeft niet per se op te starten, maar dit was ik aan het overwegen. Ik heb namelijk een aantal progjes gevonden waarmee je een aantal zaken kan automatiseren. Het meest handige daarvan was het runnen van een programma. En het intypen van c:\php3\php.exe c:\path\script.php3 levert alleen output in een DOS-box op (bij mij tenminste).

Daarom dacht ik het script te willen runnen in een browser (iexplore.exe). De browser moet dan echter automatisch opstarten met [url="http://localhost/script.php3"]http://localhost/script.php3[/url] , maar dit is mij nog niet gelukt, maar misschien ook niet nodig.

Nu denk ik er opeens aan, als je dus een script in een dos-box uitvoert (je krijgt dan in zo'n leuk command-line promptje de pure HTML te zien, dus als regels:
<HTML>
<HEAD> enz.), kan je dan ook gegevens in een database gooien? Waarschijnlijk wel, maar dan kan ik nog geen leuke melding te zien bij succesvolle script-run.

Maar goed, ik dwaal af (maar kan het wel, dat database-inserten?). Wat ik dus uiteindelijk wil is een php script om het uur te laten runnen die elke keer wat in een database insert. Is dit mogelijk en zo ja hoe? Ik zit met win98 opgescheept (heb wel linux -> 386 en zwaar oud. RedHat 3.0.3 wel te verstaan), dus crontabs zijn onbruikbaar. Weet iemand nou een manier waarop dit kan?

Verwijderd

Ja, tuurlijk kan dat. als je een echo "hallo"; doet in een dos box komt die echo gewoon op je command line te staan, doe je dat in een browser dan komt er "hallo" in je browser te staan.

Als je aan het eind van je script zegt:

if (alles goed){
echo "Alles is goed gegaan";
}
else
{
echo "Er is iets fout gegaan..";
}

Dan krijg ej die msg's mooi in je dos boxje te zien. Verder kan je alle commando's en functies gewoon gebruiken hoor. PHP scripje runnen heeft in principe geen bal met een webserver te maken, je hebt alleen de mogelijkheid om het te integreren in een webserver.

Dingen als inserten in MySQL heeft dus ook nix met een webserver of browser te maken. Gaat dus prima als je hem command line runt....
Pagina: 1