PDA

Bekijk Volledige Versie : Cronjob



thrunx
27/09/06, 11:53
Hoi,

Ik heb een script gemaakt die een backup maakt van een aantal databases en de sql op een andere server moet plaatsen.

Als ik het script aanroep via de http, dan werkt het prima en krijg ik een e-mail binnen. Maar zodra het script via de cronjob wordt aangeroepen krijg ik geen mail binnen en werkt het niet. Ik ben erachter waar het probleem ligt, maar kan geen oplossing hiervoor vinden. Zodra hij een ftp-connectie probeert te openen, voert de cronjob de rest van het script niet meer uit.

Ik heb de cronjob onder de root toegevoegd aan de user "root (Charlie &)".

Gestripped script:
<?
$conn_id = ftp_connect($ftp_host);
$login_result = ftp_login($conn_id, $ftp_username, $ftp_password);
ftp_close($conn_id);
mail("steven.vandenbraak [AT] cupella [DOT] nl","backup","gelukt","From: info [AT] cupella [DOT] nl");
?>

Ken ik hem toe aan de verkeerde gebruiker, of mag de root geen ftp-connectie openen? Ik heb het trouwens ook al geprobeerd om de cronjob toe te kennen aan psaadm en admin.

Groetjes,
Steven

PS. Als ik de eerste 3 regels weglaat, krijg ik bij de cronjob wel een mail binnen.

starfix
27/09/06, 12:09
Kloppen de FTP gegevens wel?

Edit: onnodige quote

thrunx
27/09/06, 12:22
Ja die kloppen, omdat het script getest is door gewoon via de URL aan te roepen.

Ik heb de variabelen uiteraard uit het bovenstaande script weggelaten ;)

starfix
27/09/06, 12:27
Wat is de regel van de cronjob? Roep je eerst PHP op? Zoiets:
50 23 * * * root /usr/local/bin/php -f /usr/bestanden/bestand.php

thrunx
27/09/06, 12:34
dit is het commando:

/usr/local/psa/admin/bin/php /usr/local/psa/home/vhosts/****.nl/httpdocs/backup.php >/dev/null 2>&1

De tijden staan allemaal op *

Frangkje
27/09/06, 12:41
Als het wel werkt door hem via apache aan te roepen kun je er natuurlijk voor kiezen om de url vanuit de cronjob met fetch of lynx aan te roepen en zo apache (onder vermoedelijk een andere gebruiker dan root) het php script te laten uitvoeren.

starfix
27/09/06, 12:41
dit is het commando:

/usr/local/psa/admin/bin/php /usr/local/psa/home/vhosts/****.nl/httpdocs/backup.php >/dev/null 2>&1

De tijden staan allemaal op *Heb je niet per ongeluk in de php file includes staan de niet de volledige pad gebruiken? Includen moet als:
include "/usr/local/psa/home/vhosts/****.nl/httpdocs/settings.php"; Anders kan hij de bestanden niet includen.

Let ook op dat als je overal * hebt staan er elke minuut een backup wordt gemaakt, en je elk uur 60 mailtjes in je mailbox krijgt...

thrunx
27/09/06, 12:45
@Frangkje: hoe zou dat commando er dan uitzien?

@starfix: ik gebruik geen includes in dat backup bestand om dat soort dingen te voorkomen.

Ik heb nu tijdelijk overal * staan terwijl ik aan het testen en dingen aan het veranderen ben. Straks zet ik hem op 11 uur 's avonds elke dag :)

Frangkje
27/09/06, 12:57
@Frangkje: hoe zou dat commando er dan uitzien?


Bijvoorbeeld:

* * * * * lynx -dump "http://www.domein.ext/path/file.php"

Pauluzs
28/09/06, 16:13
Volgens mij roept de cronjob het script op uit de command line, als ik me niet vergis werkt dit op mijn debian niet zonder php4-cli (command line interface)

Ramon Fincken
28/09/06, 20:47
Heb je plesk?
Bij mij werkt dit prima :)


wget -O /dev/null -q http://www.server.nl/script.php

thrunx
29/09/06, 11:41
@Frangkje: Bij mij werkt het niet...

@Pauluzs: Ik weet niet zeker of we dat hebben, maar we draaien ook php5.

@Ramon Fincken: Ik ga het ff uitproberen :)

Ik ben er uit! Het ligt aan de server... :|

Ik heb de bovenstaande wget cronjob toegevoegd op een andere server, en daar werkt hij wel!

Bedankt allemaal!!!! :D

Ik ga alleen nog wel even contact opnemen met m'n serverboer, om te kijken of we dat ook gewoon op de andere server aan de praat kunnen krijgen ;)

rolandow
29/09/06, 13:00
Het ligt niet aan de server. Een php script roep je doorgaans niet direct aan, maar via PHP, wget, lynx, whatever.

thrunx
29/09/06, 13:03
De cronjob van Ramon Fincken "wget -O /dev/null -q http://www.server.nl/script.php" werkt niet op de ene server, maar wel op de andere. Precies dezelfde cronjob...dan is er toch wat mis met de ene server?

rolandow
29/09/06, 13:08
Oops, ik had de spatie niet gezien :S I rest my case.

Heb je al eens geprobeert het domein te pingen vanaf de server? Of het script eens aanroepen met lynx? Dan zie je vanzelf de foutmelding. Soms werkt de DNS van domeinen die op de server zelf staan niet helemaal lekker. Op misschien luistert Apache alleen naar het public IP, en resolved het domein naar het interne IP?

Je zou het domein dan (quickfix) in /etc/hosts kunnen zetten.