us-pata
asked on
How to make a crontrolpanel for apache sites with cronjobs, a2ensite, a2dissite and force-reload
Hi.
I have created a php script that integrates with a mysql database with all my sites in it.
The script works perfectly when i run it in console on account with access to apache with the php script.php command.
But when i add it to crontab to run every 5 minute i get an e-mail saying "command not found: a2ensite". same thing with a2dissite.
Is there anything i am doing wrong in my script?
Or do i have to learn myself cgi?
The command beeing run is in the codefield.
I have created a php script that integrates with a mysql database with all my sites in it.
The script works perfectly when i run it in console on account with access to apache with the php script.php command.
But when i add it to crontab to run every 5 minute i get an e-mail saying "command not found: a2ensite". same thing with a2dissite.
Is there anything i am doing wrong in my script?
Or do i have to learn myself cgi?
The command beeing run is in the codefield.
<?php
/**************************************\
|** Denne filen skal kjøre i crontab **|
\**************************************/
$date = date("Y-m-d H:i:s");
// Lage funksjoner for å forenkle kroppen på filen
function mysqlconnect(){ // Koble til MySQL
include("config.inc.php");
@mysql_connect($server,$username,$password) or die("DB: Access Denied");
@mysql_select_db($database) or die("Unable to select database");
}
function mysqlrun($var){
$result = mysql_query($var);
return $result;
}
/* UTFÃÜR ENDRINGER */
mysqlconnect();
$db = mysqlrun("SELECT id, sitename, enabled FROM `a2_sites` WHERE cronthis = '1'");
$execforce = 0;
while($sql = mysql_fetch_array($db)) {
$execforce = 1;
$sitename = ""; //Tømme stringen
$sitename = $sql['sitename'];
if($sql['enabled'] == 1) {
mysqlrun("UPDATE `a2_sites` SET `cronthis` = '0' WHERE `id` =$sql[id] LIMIT 1;");
exec("a2ensite $sitename");
//echo "a2ensite $sitename\r\n";
} else {
mysqlrun("UPDATE `a2_sites` SET `cronthis` = '0' WHERE `id` =$sql[id] LIMIT 1;");
exec("a2dissite $sitename");
//echo "Croned disabled thingy<br>";
//echo "a2dissite $sitename\r\n";
}
}
if($execforce == 1) exec("/etc/init.d/apache2 force-reload");
mysql_close();
/* SJEKK SYSTEMET */
// Sjekke sitene som eksisterer
array(exec("ls /etc/apache2/sites-available/", $sitesavailable)); // Sider som er tilgjengelige
array(exec("ls /etc/apache2/sites-enabled/", $sitesenabled)); // Sider som er aktiverte
$num_sitesavailable = count($sitesavailable);
$num_sitesenabled = count($sitesenabled);
$i = 0;
while($i < $num_sitesavailable){
// Sjekke om siden er aktivert
$enabled = 0; //Resette enabled status til Ikke Aktivert
$in = 0;
while($in < $num_sitesenabled){
if(!$enabled){
if($sitesenabled[$in] == "000-default") $sitesenabled[$in] = "default"; // Fiks for lokal standard fil
if($sitesenabled[$in] == $sitesavailable[$i])
$enabled = 1;
}
$in++;
}
$sitename = $sitesavailable[$i];
mysqlconnect();
$db = mysqlrun("SELECT sitename FROM `a2_sites` WHERE sitename = '$sitename'");
$num = mysql_num_rows($db);
if($num == 0){
$isthere = 0;
} else { $isthere = 1; }
if($isthere == 0){ // insert
mysqlrun("INSERT INTO `a2_sites` ( `id` , `sitename` , `lastupdate` , `cronthis` , `enabled` , `health` ) VALUES (NULL , '$sitename', '$date', '0', '0', '0');");
//echo "Finnes ikke i SQL, inserting: $sitename\r\n";
} else { // update
//echo "UPDATE `a2_sites` SET `lastupdate` = '$date', `enabled` = '$enabled', `health` = '1', WHERE `sitename` = '$sitename' LIMIT 1;\r\n";
mysqlrun("UPDATE `a2_sites` SET `lastupdate` = '$date', `enabled` = '$enabled', `health` = '1' WHERE `sitename` = '$sitename' LIMIT 1;");
}
mysql_close();
$i++;
}
// Check site health
mysqlconnect();
$db = mysqlrun("SELECT id, sitename FROM `a2_sites` WHERE health = '1'");
while($sql = mysql_fetch_array($db)) {
$id = $sql['id'];
$sitename = $sql['sitename'];
$isthere = file_exists("/etc/apache2/sites-available/$sitename");
if($isthere == 0) mysqlrun("UPDATE `a2_sites` SET `health` = '0', `enabled` = '0' WHERE `id` = '$id' LIMIT 1;");
//echo "Isthere = $isthere | UPDATE `a2_sites` SET `health` = '0', `enabled` = '0' WHERE `id` = '$id' LIMIT 1;\r\n";
}
mysql_close();
?>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER