Irgendwie kapier ich jetzt nicht, was Shell und PHP da gemeinsam machen sollen...
Ein cronjob, der ein Skript aufruft, benötigt sämtliche Angaben absolut. Probier evtl. mal /etc/init.d/named restart aus, oder wie das bei SuSE heisst ;)
also das geht so ein script (php) trägt dns definitionen in eine db ein.
alle 15 min soll dann ein cronjob laufen (anderes php) was dann die konfigurationsdateien manipuliert.
anschließend soll dieses script nur wenn nötig den nameserver reloaden.
und das wollte ich mit dem befehl system machen, dies funktioniert jedoch nicht so wie das auf der bash geht.
<?php require_once('../../Connections/kr_media.php'); ?>
<?php
# Diese Datei wird über den CRON Daemon aufgerufen alle 15 Minuten
# Sollte das Script feststellen, das in den letzten 15 Minuten
# Eintragungen geupdated oder hinzugefügt worden sind
# wird dies die NS Config neu Schreiben und den NS
# neu starten
$jetzt = time()-(15*60); // Zeit jetzt - 15 Minuten
mysql_select_db($database_kr_media, $kr_media);
$query_check_neue_eintraege = "SELECT dns_records.id FROM dns_records WHERE dns_records.erstellt > '$jetzt';";
$check_neue_eintraege = mysql_query($query_check_neue_eintraege, $kr_media) or die(mysql_error());
$row_check_neue_eintraege = mysql_fetch_assoc($check_neue_eintraege);
$totalRows_check_neue_eintraege = mysql_num_rows($check_neue_eintraege);
if ($totalRows_check_neue_eintraege > 0) { // Wenn neue Einträge in den letzten 15 Minuten
// Alle DNS Records auslesen
mysql_select_db($database_kr_media, $kr_media);
$query_lese_alle_dns_records = "SELECT * FROM dns_records";
$lese_alle_dns_records = mysql_query($query_lese_alle_dns_records, $kr_media) or die(mysql_error());
$totalRows_lese_alle_dns_records = mysql_num_rows($lese_alle_dns_records);
// Originalkopie der named.conf einlesen um neue Records anzufügen
$fp = fopen('named.orig', 'r');
while (!feof($fp)) {
$named_orig .= fread($fp, 128);
}
fclose($fp);
// named.conf neu schreiben anhand der Datenbankeinträge
$fp = fopen('/etc/named.conf', 'w');
fputs($fp, $named_orig, strlen($named_orig)); // named.conf neu erstellen
while ($res = mysql_fetch_object($lese_alle_dns_records, MYSQL_ASSOC)) {
fputs($fp, $res->named_template, strlen($res->named_template));
$fp2 = fopen ("/var/named/".$res->domain.".".$res->tld.".zone", "w");
fputs($fp2, $res->zonefile_template, strlen($res->zonefile_template));
fclose($fp2);
}
fclose($fp);
// Nameserver reloaden nachdem alle Daten geschrieben wurden
echo "DNS Server wurde modifiziert.<br>";
echo "Serverausgabe nach Neustart:<br>";
echo system("/usr/sbin/rcnamed restart");
}
mysql_free_result($check_neue_eintraege);
?>
1. Wie sieht dein Cronjob aus?
2. Ein Fehler, den man leicht machen kann, aber schwer zu finden ist: mach mal einen Zeilenumbruch hinter den Cronjob (ENTER drücken), wenn das nicht ist, kann Cron den Job nicht lesen.
/usr/sbin/rcnamed: line 41: checkproc: command not found
/usr/sbin/rcnamed: line 43: killproc: command not found
..failedShutting down name server bind9 - Warning: named not running !
/usr/sbin/rcnamed: line 30: checkproc: command not found
/usr/sbin/rcnamed: line 36: startproc: command not found
..failedStarting name server bind9
Kann damit jemand was anfangen?
Also offensichtlich ist das er das Script nicht ausführen konnte.
Bisher kam ja nicht mal diese Fehlermeldung.
Gruß
Daniel
ed: den named habe ich ausgeschaltet, um zu sehen ob er startet.
da der eintrag nicht in der /var/log/messages war
ed2: kann man dem named nicht ein 'hup' senden mit php?
Die Fehlermeldungen besagen, dass das rcnamed Script etliche Sachen nicht finden kann, also ist irgendwas mit dem PATH falsch, wenn via Cron gestartet wird.
Du kannst dem Named ein HUP schicken:
1.) PID des Prozesses rausbekommen
Dazu liest man die Datei /var/run/named.pid aus.
Mar 4 14:54:49 p15119052 /usr/sbin/named[29578]: loading configuration from '/etc/named.conf'
Mar 4 14:54:49 p15119052 /usr/sbin/named[29578]: no IPv6 interfaces found