Cronjob / Crontab
Ik heb zojuist bij mijn provider (Nxs) een cronjob aangemaakt die dagelijks een routine moet draaien. Hoewel de provider geen ondersteuning hierbij geeft heeft deze mij wel wat op weg geholpen. Echter, de cronjob werkt niet.
De bedoeling is dat er dagelijks een bestand, jarig.php, wordt gedraaid die een e-mail naar de jarige stuurt.
Nu heb ik ergens gelezen dat bij gebruik van php-files er nog een instelling hiervoor moet worden gemaakt.
Wie weet hier iets van of heeft ervaringen hiermee?
Je zou mij geweldig helpen.
George van Baasbank
Hoe voer je die cronjob uit, en gebruik je ook includes in je script?
Ik heb de volgende cronjob ingevoerd:
15 05 * * * /home/[gebruikersnaam]/beheer/jarig.php
Dit ou dus betekenen dat dagelijks om 05.15 uur het bestand jarig.php moet worden gestart.
Hiero0nder de code van het bestand jarig.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* @author George van Baasbank
* @copyright 2011
*/
session_start();
error_reporting(0);
// Constanten voor mysql_connect() insluiten:
require_once('mysql_connect.inc.php');
// Databaseverbinding openen:
$verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die("Verbinding mislukt: " . mysql_error());
// Database selecteren:
mysql_select_db("muziekcatalogus") or die("Kon de database niet openen: " . mysql_error());
// Query samenstellen en uitvoeren
$sql = "SELECT * FROM leden WHERE lid = 'Ja' AND MONTH(geboortedatum) = MONTH(CURDATE()) AND DAY(geboortedatum) = DAY(CURDATE()) ORDER BY naam";
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0) {
$nAantal = mysql_num_rows($result);
//echo "De database bevat ".$nAantal." leden.";
while ($row=mysql_fetch_assoc($result)){
$dJarig = $row['geboortedatum'];
$email = $row['email'];
$cVoll_naam = $row['voorletters']." ".$row['tussenvoeg']." ".$row['naam'] ;
//echo "De jarige van vandaag is ".$cVoll_naam;
// Bericht opstellen
$cBericht .= "Van harte gefeliciteerd met je verjaardag". "\r\n\r\n";
$cBericht .= "Alweer een jaartje ouder."."\r\n\r\n";
$cKaart = file_get_contents("felicitatiekaart.jpg");
// Bericht opmaken voor ontvanger
$cBericht = "Beste ".$cVoll_naam.", \r\n\r\n ".$cBericht;
$cBericht .= "\r\n";
$cBericht .= "Met vriendelijke groeten, \r\n\r\n";
$cBericht .= "De koor- en orkestleden van Catharina's Choir & Orchestra \r\n";
$cBericht .= "<noreply@".$_SERVER['SERVER_NAME'].">";
// Onderwerp en header e-mailbericht
$onderwerp = "Er is er een jarig bij het ".$_SERVER['SERVER_NAME'];
$headers = "From: noreply@".$_SERVER['SERVER_NAME']."\r\n\r\n";
// Verzenden e-mailbericht
if(mail($email,$onderwerp,$cBericht,$headers)) {
//$cMelding = "Het e-mailbericht met de felicitatie is verzonden aan: ".$cVoll_naam."\r\n\r\n";
//echo $cMelding."\r\n";
$cVoll_naam = "";
$cBericht = "";
}
}
}
//Database sluiten
mysql_close($verbinding);
?>
* @author George van Baasbank
* @copyright 2011
*/
session_start();
error_reporting(0);
// Constanten voor mysql_connect() insluiten:
require_once('mysql_connect.inc.php');
// Databaseverbinding openen:
$verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die("Verbinding mislukt: " . mysql_error());
// Database selecteren:
mysql_select_db("muziekcatalogus") or die("Kon de database niet openen: " . mysql_error());
// Query samenstellen en uitvoeren
$sql = "SELECT * FROM leden WHERE lid = 'Ja' AND MONTH(geboortedatum) = MONTH(CURDATE()) AND DAY(geboortedatum) = DAY(CURDATE()) ORDER BY naam";
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0) {
$nAantal = mysql_num_rows($result);
//echo "De database bevat ".$nAantal." leden.";
while ($row=mysql_fetch_assoc($result)){
$dJarig = $row['geboortedatum'];
$email = $row['email'];
$cVoll_naam = $row['voorletters']." ".$row['tussenvoeg']." ".$row['naam'] ;
//echo "De jarige van vandaag is ".$cVoll_naam;
// Bericht opstellen
$cBericht .= "Van harte gefeliciteerd met je verjaardag". "\r\n\r\n";
$cBericht .= "Alweer een jaartje ouder."."\r\n\r\n";
$cKaart = file_get_contents("felicitatiekaart.jpg");
// Bericht opmaken voor ontvanger
$cBericht = "Beste ".$cVoll_naam.", \r\n\r\n ".$cBericht;
$cBericht .= "\r\n";
$cBericht .= "Met vriendelijke groeten, \r\n\r\n";
$cBericht .= "De koor- en orkestleden van Catharina's Choir & Orchestra \r\n";
$cBericht .= "<noreply@".$_SERVER['SERVER_NAME'].">";
// Onderwerp en header e-mailbericht
$onderwerp = "Er is er een jarig bij het ".$_SERVER['SERVER_NAME'];
$headers = "From: noreply@".$_SERVER['SERVER_NAME']."\r\n\r\n";
// Verzenden e-mailbericht
if(mail($email,$onderwerp,$cBericht,$headers)) {
//$cMelding = "Het e-mailbericht met de felicitatie is verzonden aan: ".$cVoll_naam."\r\n\r\n";
//echo $cMelding."\r\n";
$cVoll_naam = "";
$cBericht = "";
}
}
}
//Database sluiten
mysql_close($verbinding);
?>
Verder zal in je cronjob het bestand 'mysql_connect.inc.php' niet geopend kunnen worden. Pas deze include aan naar:
Volgens mij was dat ook mijn vraag. Hoe en waar doe ik dat (Uitvoeren php-script)
George van Baasbank op 08/03/2012 17:08:08:
Volgens mij was dat ook mijn vraag. Hoe en waar doe ik dat (Uitvoeren php-script)
Zie mijn vorige reactie.
Dan krijg je dus zoiets
Gewijzigd op 08/03/2012 17:22:35 door George van Baasbank
Zie ook system('which php')
In mijn geval: /usr/local/bin/php
Gewijzigd op 08/03/2012 17:25:46 door - Ariën -
DE plek waar php5 is geïnstalleerd is mij door de provider aangereikt
Als info heb ik de tekst van het welkomstscherm van de provider gekopieerd.
Linux shell 2.6.17.11-nxs-internet.03-grsec-grsec #1 SMP Wed Jun 13 13:02:55 CEST 2007 i686 GNU/Linux
Welkom bij Nxs Internet BV!
Bij algemene vragen en/of opmerkingen e-mail: <[email protected]>.
Het draaien van IRC gerelateerde background processen is strikt verboden,
hieronder vallen bijvoorbeeld bouncers en bots zoals, PsyBNC en Eggdrop.
Misbruik van de shell, zoals het versturen van SPAM, hacken en dergelijken,
zal resulteren in de ontzegging van de toegang tot de server.
Het is ook mogelijk om verschillende utils aan te vragen doormiddel van
het versturen van een e-mail naar <[email protected]>.
Let op! Zorg er echter wel voor dat de desbetreffende utils niet reeds zijn
geinstalleerd. Gebruik voor het zoeken hiervan: find, locate en whereis.
Andere technische opmerkingen over deze server kunnen ook naar het bovenstaande
e-mail adres gestuurd worden.
# Configuratie gelijk aan het virtual hosting cluster van Nxs Internet
- Mysql5 client aanwezig: /opt/mysql5/bin/mysql
- PHP4 aanwezig in: /opt/php4/
- PHP5 aanwezig in: /opt/php5/
George van Baasbank op 08/03/2012 18:11:20:
- PHP5 aanwezig in: /opt/php5/
Dus moet je dit hebben:
/opt/php5/php
Dit staat er in mijn cronjob:
* * * * * /opt/php5/php /home/cco-harderwijk/beheer/jarig.php
Dus elke minuut ou de routine aangeroepen worden
Code (php)
1
* * * * * /opt/php5/php /home/cco-harderwijk/beheer/jarig.php >/home/cco-harderwijk/beheer/error.txt 2>&1
Dan worden de eventuele output en errors in /home/cco-harderwijk/beheer/error.txt geschreven en kan je zien wat er fout gaat.
Moet 2>&1 er ook achter?????
Ja, dat is om de errors op te vangen.
Het blijft angstig stil.........
Zo nee, maak zelf even een bestandje error.txt aan in de map beheer en geef dat 666 rechten. Dan is het zeker dat daarin geschreven kan worden.
Toevoeging op 08/03/2012 19:09:48:
Ik ben bang dat de cronjob niet wordt uitgevoerd.
Zet er eens een echo in. Dat moet dan ook in error.txt komen.