Avatar billede net-base.dk Nybegynder
22. december 2005 - 10:54 Der er 22 kommentarer og
1 løsning

PHP script som Cronjob på linux

Hey.

Ved ik om jeg skal stille mit spørgsmål her. men prøver aligevel...

Jeg vil gerne vide hvordan jeg kan afvikle et php script som et cronjob på min Linux(Gentoo) webserver.

Er der nogle som ved eller kan finde et link til en side som kan forklare det, har selv ledt på google.com men har ikke kunne finde noget.
Avatar billede jakobdo Ekspert
22. december 2005 - 11:07 #1
Prøv at skriv: crontab -e
og indsæt så:
* * * * * /usr/bin/php /var/www/htdocs/ditscript.php
Avatar billede jakobdo Ekspert
22. december 2005 - 11:08 #2
Det med tiden kan du evt finde lidt hjælp her: http://www.thepcmanwebsite.com/crontab_generator.shtml
Avatar billede net-base.dk Nybegynder
22. december 2005 - 11:27 #3
Ja har lavet denne linie nu
*/5 * * * *      /usr/bin/php /var/www/localhost/htdocs/CRON/testcron.php

Så mener jeg den kører hvert 5 min...
Avatar billede jakobdo Ekspert
22. december 2005 - 11:29 #4
Det ser også rigtigt ud ja!
Avatar billede net-base.dk Nybegynder
22. december 2005 - 11:32 #5
Det eneste som dette script gør lige nu er at indsætte datoen i en database... hehe
og når jeg har set det virker så skal jeg have lavet mit script ordentligt...
Avatar billede jakobdo Ekspert
22. december 2005 - 11:44 #6
Super!
Og et svar!
Avatar billede net-base.dk Nybegynder
22. december 2005 - 12:34 #7
Det virker ikke helt. hvis du kan hjælpe med at få det til at køre så ville jeg være glad. har lige prøvet at fyre denne linie af...

/usr/bin/php /var/www/localhost/htdocs/CRON/testcron.php

Og så kommer den med en Fejl.
Fatal error: Call to undefined function:  mysql_connect() in /var/www/localhost/htdocs/CRON/testcron.php on line 9

Hvorfor det... mit script ser sådan her ud:

<?php

$hostname = "localhost";
$username = "root";
$password = "xpdeployment";
$database = "test";
$table    = "crontest";

mysql_connect($hostname,$username,$password) or die(mysql_error());

mysql_select_db($database) or die(mysql_error());

$sql = "INSERT INTO `crontest` (`date`) VALUES ('".date("Y-m-d H:i:s")."')";

mysql_query($sql) or die(mysql_error());

?>
Avatar billede net-base.dk Nybegynder
22. december 2005 - 12:37 #8
Pis glemte at fjerne min kode, så godt man ikke kan komme ind i den ude fra, men kan da være jeg skal skifte koden nu...
Avatar billede net-base.dk Nybegynder
22. december 2005 - 15:15 #9
Hey har fundet en måde at gøre det på ved at kalde scriptet igennem links http://127.0.0.1/CRON/cron.php men der må da findes en bedere måde...
Avatar billede jakobdo Ekspert
22. december 2005 - 22:13 #10
Det lyder godt nok mærkeligt at den fejler med mysql_connect hvis du kalder den fra cron.
Hvad hvis du bare køre filen via command line?

php -q testcron.php
Avatar billede net-base.dk Nybegynder
23. december 2005 - 08:37 #11
Så fejler den også... det er sgu lidt mystisk... og rimlig iriterende...
Avatar billede Slettet bruger
23. december 2005 - 12:10 #12
Når du kalder via cron, så er det PHP-CLI, du bruger, og den har en anden opsætning end den PHP, der kører som modul i apache.

Prøv at sammenligne phpinfo()
Avatar billede net-base.dk Nybegynder
23. december 2005 - 14:47 #13
sandbox -> hvad kan jeg så gøre for at det kommer til at virke?
Avatar billede Slettet bruger
27. december 2005 - 09:17 #14
Finde den php.ini som bruges til CLI-udgaven, eller hvis der ikke er en, så lave en og tilføje den til kommandolinien:

*/5 * * * *      /usr/bin/php -c /home/brugernavn/php.ini /var/www/localhost/htdocs/CRON/testcron.php
Avatar billede net-base.dk Nybegynder
27. december 2005 - 11:35 #15
Ja så har jeg prøvet at kalde filen sådan her:
/usr/bin/php -c /etc/php/cli-php4/php.ini /var/www/localhost/htdocs/CRON/testcron_mysql.php

og det giver desværre stadig denne fejl:
Fatal error: Call to undefined function:  mysql_connect() in /var/www/localhost/htdocs/CRON/testcron_mysql.php on line 6

og mit php script ser sådan her ud:
01:<?php
02:$hostname = "localhost";
03:$username = "root";
04:$password = "xxxx";
05:$database = "test";
06:mysql_connect($hostname,$username,$password);
07:mysql_select_db($database);
08:$sql = "INSERT INTO `crontest` (`date`) VALUES ('".date("Y-m-d H:i:s")."')";
09:mysql_query($sql) or die(mysql_error());
10:exit;
11:?>
Avatar billede Slettet bruger
28. december 2005 - 07:27 #16
Så mangler du garanteret en linie til at indlæse PHPs MySQL-modul i den php.ini - eller måske er linien bare en kommentar.

Prøv

grep mysql /etc/php/cli-php4/php.ini

for at se om linien er der og bare skal gøres aktiv.
Avatar billede net-base.dk Nybegynder
28. december 2005 - 15:20 #17
Giver dette svar...

mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
; Default port number for mysql_connect().  If unset, mysql_connect() will use
; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
mysql.default_port =
mysql.default_socket =
; Default host for mysql_connect() (doesn't apply in safe mode).
mysql.default_host =
; Default user for mysql_connect() (doesn't apply in safe mode).
mysql.default_user =
; Default password for mysql_connect() (doesn't apply in safe mode).
; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
Avatar billede Slettet bruger
28. december 2005 - 15:47 #18
Det ser meget fornuftigt ud. Jeg havde også lige overset at stien til din php.ini afslørede, at du bruger PHP version 4.X, og det er først i version 5, at man skal sikre sig at loade mysql-udvidelsen. I version 4, er den enten indbygget i PHP (det er standard) eller den er valgt fra, da PHP blev compilet.

Nu bruger du jo Gentoo, så måske skal du se lidt på dine USE-flags for CLI-udgaven af PHP.
Avatar billede net-base.dk Nybegynder
28. december 2005 - 15:50 #19
okay... lyder som en større og mere kompliceret opgave... efter som jeg stadig er på stadiet af at være n00b til linux...

Så hvis du kan hjælpe med det smider jeg gerne flere point i...
Avatar billede Slettet bruger
28. december 2005 - 15:59 #20
For at finde ud af, hvad det handler om, kan du læse: http://www.gentoo.org/doc/da/handbook/handbook-x86.xml?part=2&chap=2

Nu ved jeg så ikke om php-cli er en del af samme pakke som den normale php eller om den er en pakke for sig selv. Derudover kan det være, at din pakke skal hedde php4 i stedet for bare php. Jeg bruger nemlig ikke selv Gentoo men Debian, og i Debian er php-cli en pakke for sig selv.

En af følgende kommandoer burde give lidt oplysninger om dine USE-flags:

emerge --pretend --verbose php-cli
emerge --pretend --verbose php
emerge --pretend --verbose php4-cli
emerge --pretend --verbose php4
Avatar billede net-base.dk Nybegynder
28. december 2005 - 16:22 #21
Dem her kender den ikke:
emerge --pretend --verbose php-cli
emerge --pretend --verbose php4-cli
emerge --pretend --verbose php4

og gør jeg sådan her:
emerge --pretend --verbose php

Får jeg dette resultat:
These are the packages that I would merge, in order:

Calculating dependencies

!!! The short ebuild name "php" is ambiguous.  Please specify
!!! one of the following fully-qualified ebuild names instead:

    dev-lang/php
    dev-php/php

og gør jeg så sådan her:
emerge --pretend --verbose dev-php/

Får jeg det her:
These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild    U ] dev-php/php-4.4.0-r4 [4.4.0-r1] +X +berkdb +crypt -curl -debug -doc -fdftk -firebird -flash -freetds -gd -gd-external +gdbm -gmp -hardenedphp -imap -informix +ipv6 -java +jpeg -kerberos -ldap -mcal -memlimit -mssql +mysql* +ncurses +nls -oci8 -odbc +pam +png -postgres +readline -snmp +spell +ssl +tiff* +truetype +xml2 -yaz 0 kB

Total size of downloads: 0 kB

Kan se at jeg skal have sat mig ned og læst en del, men har desværre ikke tiden før i morgen... så mit næste svar bliver ikke før det...
Avatar billede net-base.dk Nybegynder
21. april 2006 - 13:24 #22
Fik aldrig løst problemet og har fået en nye server nu med PHP5 på, Men har heller ikke brug for det mere...
Avatar billede jakobdo Ekspert
21. april 2006 - 14:16 #23
Jeg takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester