<?php
function WakeOnLan($mac_address, $addr, $cidr, $port)
{
// Prepare magic packet: part 1/3 (defined constant)
$buf="";
for($a=0; $a<6; $a++) $buf .= chr(255); // the defined constant as represented in hexadecimal: FF FF FF FF FF FF (i.e., 6 bytes of hexadecimal FF)
//Check whether $mac_address is valid
$mac_address=strtoupper($mac_address);
$mac_address=str_replace(":", "-", $mac_address);
if ((!preg_match("/([A-F0-9]{2}[-]){5}([0-9A-F]){2}/",$mac_address)) || (strlen($mac_address) != 17))
{
$error = "Eingabefehler: Das Format der MAC-Addresse (<?=$mac_address?>) ist nicht \"xx-xx-xx-xx-xx-xx\".<br>\n";
return $error; // false
}
else
{
// Prepare magic packet: part 2/3 (16 times MAC-address)
$addr_byte = explode('-', $mac_address); // Split MAC-address into an array of (six) bytes
$hw_addr="";
for ($a=0; $a<6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a])); // Convert MAC-address from bytes to hexadecimal to decimal
$hw_addr_string="";
for ($a=0; $a<16; $a++) $hw_addr_string .= $hw_addr;
$buf .= $hw_addr_string;
}
// Resolve broadcast address
if (filter_var ($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) // same as (but easier than): preg_match("/\b(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])\b/",$addr)
{
// $addr has an IP-adres format
}
else
{
// Whitespaces confuse name lookups
$addr=trim($addr);
// If you pass to gethostbyname() an:
// unresolvable domainname, gethostbyname() returns the domainname (rather than 'false')
// IP address, gethostbyname() returns that IP address.
if (gethostbyname($addr) == $addr)
{
// $addr is NOT a resolvable domainname
$error = "Input error: host name of broadcast address is unresolvable.<br>\n";
return $error; // false
}
else
{
// $addr IS a resolvable domainname
$addr = gethostbyname($addr);
}
}
// Store input value for cookie
$resolved_addr = $addr;
// If $cidr is set, replace $addr for its broadcast address
if ($cidr != "")
{
// Check whether $cidr is valid
if ((!ctype_digit($cidr)) || ($cidr < 0) || ($cidr > 32))
{
$error = "Input error: CIDR subnet mask is not a number within the range of 0 till 32.<br>\n";
return $error; // false
}
// Convert $cidr from one decimal to one inverted binary array
$inverted_binary_cidr="";
for ($a=0; $a<$cidr; $a++) $inverted_binary_cidr .= "0"; // Build $inverted_binary_cidr by $cidr * zeros (this is the mask)
$inverted_binary_cidr = $inverted_binary_cidr.substr("11111111111111111111111111111111",0,32-strlen($inverted_binary_cidr)); // Invert the mask (by postfixing ones to $inverted_binary_cidr untill 32 bits are filled/ complete)
$inverted_binary_cidr_array = str_split($inverted_binary_cidr); // Convert $inverted_binary_cidr to an array of bits
// Convert IP address from four decimals to one binary array
$addr_byte = explode('.', $addr); // Split IP address into an array of (four) decimals
$binary_addr="";
for ($a=0; $a<4; $a++) {
$pre = substr("00000000",0,8-strlen(decbin($addr_byte[$a]))); // Prefix zeros
$post = decbin($addr_byte[$a]); // Postfix binary decimal
$binary_addr .= $pre.$post;
}
$binary_addr_array = str_split($binary_addr); // Convert $binary_addr to an array of bits
// Perform a bitwise OR operation on arrays ($binary_addr_array & $inverted_binary_cidr_array)
$binary_broadcast_addr_array="";
for ($a=0; $a<32; $a++) $binary_broadcast_addr_array[$a] = ($binary_addr_array[$a] | $inverted_binary_cidr_array[$a]); // binary array of 32 bit variables ('|' = logical operator 'or')
$binary_broadcast_addr = chunk_split(implode("", $binary_broadcast_addr_array),8,"."); // build binary address of four bundles of 8 bits (= 1 byte)
$binary_broadcast_addr = substr($binary_broadcast_addr,0,strlen($binary_broadcast_addr)-1); // chop off last dot ('.')
$binary_broadcast_addr_array = explode(".", $binary_broadcast_addr); // binary array of 4 byte variables
$broadcast_addr_array="";
for ($a=0; $a<4; $a++) $broadcast_addr_array[$a] = bindec($binary_broadcast_addr_array[$a]); // decimal array of 4 byte variables
$addr = implode(".", $broadcast_addr_array); // broadcast address
}
// Check whether $port is valid
if ((!ctype_digit($port)) || ($port < 0) || ($port > 65536))
{
$error = "Input error: Port is not a number within the range of 0 till 65536.<br>\n";
return $error; // false
}
// Check whether UDP is supported
if (!array_search('udp', stream_get_transports()))
{
$error = "No magic packet can been sent, since UDP is unsupported (not a registered socket transport).<br>\n";
return $error; // false
}
if (function_exists('fsockopen'))
{
// Try fsockopen function - To do: handle error 'Permission denied'
$socket=fsockopen("udp://" . $addr, $port, $errno, $errstr);
if($socket)
{
$socket_data = fwrite($socket, $buf);
if($socket_data)
{
$function = "fwrite";
// $sent_fsockopen = "A magic packet of ".$socket_data." bytes has been sent via UDP to IP address: ".$addr.":".$port.", using the '".$function."()' function.<br>";
$sent_fsockopen = "OK (fsockopen)" ;
// $content = bin2hex($buf);
// $sent_fsockopen = $sent_fsockopen."Contents of magic packet:<br><textarea rows=\"1\" name=\"content\" cols=\"".strlen($content)."\">".$content."</textarea><br>\n";
fclose($socket);
unset($socket);
return $sent_fsockopen; // true
}
else
{
echo "Using 'fwrite()' failed, due to error: '".$errstr."' (".$errno.")<br>\n";
fclose($socket);
unset($socket);
}
}
else
{
//echo "Nutzung der Funktion 'fsockopen()' fehlgeschlagen - eventuell Zugriffseinschränkung<br>\n";
unset($socket);
}
}
// Try socket_create function
if (function_exists('socket_create'))
{
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // create socket based on IPv4, datagram and UDP
if($socket)
{
$level = SOL_SOCKET; // to enable manipulation of options at the socket level (you may have to change this to 1)
$optname = SO_BROADCAST; // to enable permission to transmit broadcast datagrams on the socket (you may have to change this to 6)
$optval = true;
$opt_returnvalue = socket_set_option($socket, $level, $optname, $optval);
if($opt_returnvalue < 0)
{
$error = "Using 'socket_set_option()' failed, due to error: '".socket_strerror($opt_returnvalue)."'<br>\n";
return $error; // false
}
$flags = 0;
// To do: handle error 'Operation not permitted'
$socket_data = socket_sendto($socket, $buf, strlen($buf), $flags, $addr, $port);
if($socket_data)
{
$function = "socket_sendto";
// $socket_create = "A magic packet of ".$socket_data." bytes has been sent via UDP to IP address: ".$addr.":".$port.", using the '".$function."()' function.<br>";
// $content = bin2hex($buf);
// $socket_create = $socket_create."Contents of magic packet:<br><textarea rows=\"1\" name=\"content\" cols=\"".strlen($content)."\">".$content."</textarea><br>\n";
$socket_create = "OK (create)";
socket_close($socket);
unset($socket);
return $socket_create; // true
}
else
{
$error = "Using 'socket_sendto()' failed, due to error: '".socket_strerror(socket_last_error($socket))."' (".socket_last_error($socket).")<br>\n";
socket_close($socket);
unset($socket);
return $error; // false
}
}
else
{
$error = "Using 'socket_create()' failed, due to error: '".socket_strerror(socket_last_error($socket))."' (".socket_last_error($socket).")<br>\n";
return $error; // false
}
}
else
{
$error = "No magic packet has been sent, since no functions are available to transmit it.<br>\n";
return $error; // false
}
}
$cidr = "27"; // MASK: 255.255.255.224 ==> 27 (3 Byte * 8 Bit)
$port = "7"; // Bei mir ging auch 1 und 7, weitere ?
$mac_address = "";
$addr = "10.11.1.2";
if($_GET['machine'] == "backupsrv")
{
$mac_address = "00-00-00-00-00-00"; //MAC Adresse des Backupserver eingeben
$machine = "Backupserver";
$addr = "10.11.1.13";
$port = "7";
$cidr = "27";
}
$Return_WakeOnLan = WakeOnLan($mac_address, $addr, $cidr, $port); // executes this function
echo "Rückmeldung: ",$Return_WakeOnLan;
$TimeStamp = time();
$datum = date("d.m.Y",$TimeStamp);
$uhrzeit = date("H:i:s",$TimeStamp);
echo " ",$datum," - ",$uhrzeit," Uhr";
?>
http://<IP-Adresse eures NAS>/?legacyBackup=1
vim /usr/syno/etc/synobackup.conf
[task 10]
vim /volume1/scripts_logs/scripts/backup2supermicro.sh
#!/bin/sh
datum="`date +%Y-%m-%d`"
zeit="`date +%H:%M:%S`"
# Countdown bis zum Aufwachen des Server
countdown=120
NOW=$(date +"%F")
# Maximales Alter der Logfile
tage=14
find /volume1/scripts_logs/logs/backup -iname "*.log" -mtime +$tage -delete
# Sorgt dafuer, dass das Logs Verzeichnis auch exisitert, sonst gibt es Fehler
logfile="/volume1/scripts_logs/logs/backup/$datum-backup2backupserver.log"
main()
{
# IP Adresse des Backupservers
IP='10.11.1.13'
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|############################## Anwendung gestartet ##################################"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Pruefung, ob Backupserver eingeschaltet ist"
if ping -c 2 $IP > /dev/null; then
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Backupserver ist eingeschaltet und erreichbar"
# Wenn ihr keine DB sichert, den Punkt auskommentieren
echo "$datum $zeit Uhr|INFO Starte Datenbanksicherung"
/volume1/scripts_logs/scripts/MariaDBbackup.sh >> $logfile
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Datenbankensicherung abgeschlossen"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von documents"
/var/packages/HyperBackup/target/bin/synonetbkp --backup -k 1
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von documents abgeschlossen"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von drivers"
/var/packages/HyperBackup/target/bin/synonetbkp --backup -k 2
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von drivers abgeschlossen"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von homes"
/var/packages/HyperBackup/target/bin/synonetbkp --backup -k 3
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von homes abgeschlossen"
# Das Herunterfahren des Windows-Servers wird über net rpc bewerkstelligt
echo "$datum $zeit Uhr|INFO Herunterfahren von Backupserver"
net rpc SHUTDOWN -I 10.11.1.13 -U <Benutzername des Windows Benutzers>%<Passwort des Windows Benutzers> -t 10 -C "Backup abgeschlossen. Server wird in 10 Sekunden heruntergefahren!" >> $logfile
echo "$datum $zeit Uhr|INFO Warte 30 Sekunden bis Backupserver herunterfahren wurde"
sleep 30
if ping -c 2 $IP > /dev/null; then
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|FEHLER Herunterfahren von Backupserver fehlgeschlagen"
echo "$datum $zeit Uhr|INFO Bitte Server manuell herunterfahren"
echo "$datum $zeit Uhr|############################## Anwendung beendet ####################################"
exit 1
else
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Herunterfahren von Backupserver erfolgreich"
echo "$datum $zeit Uhr|############################## Anwendung beendet ####################################"
exit 0
fi
else
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Backupserver ist offline"
echo "$datum $zeit Uhr|INFO Backupserver wird nun eingeschaltet"
# Hier wird ein php Skript ausgefuehrt, welches mittels WOL den Server aufweckt
curl "http://localhost/system/StarteServer.php?machine=backupsrv"
echo "$datum $zeit Uhr|INFO Warte $countdown Sekunden bis Backupserver hochgefahren ist"
sleep $countdown
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Pruefung, ob Backupserver hochgefahren wurde"
if ping -c 2 $IP > /dev/null; then
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Backupserver erfolgreich gestartet und erreichbar"
echo "$datum $zeit Uhr|INFO Starte Datenbanksicherung"
# DB Backup optional
/volume1/scripts_logs/scripts/MariaDBbackup.sh >> $logfile
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Datenbankensicherung abgeschlossen"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von documents"
/var/packages/HyperBackup/target/bin/synonetbkp --backup -k 1
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von documents abgeschlossen"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von drivers"
/var/packages/HyperBackup/target/bin/synonetbkp --backup -k 2
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von drivers abgeschlossen"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von homes"
/var/packages/HyperBackup/target/bin/synonetbkp --backup -k 3
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Hyperbackup von homes abgeschlossen"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Herunterfahren von Backupserver"
net rpc SHUTDOWN -I 10.11.1.13 -U <Benutzername des Windows Benutzers>%<Passwort des Windows Benutzers> -t 10 -C "Backup abgeschlossen. Server wird in 10 Sekunden heruntergefahren!" >> $logfile
sleep 30
if ping -c 2 $IP > /dev/null; then
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|FEHLER Herunterfahren von Backupserver fehlgeschlagen"
echo "$datum $zeit Uhr|INFO Bitte Server manuell herunterfahren"
echo "$datum $zeit Uhr|############################## Anwendung beendet ####################################"
exit 1
else
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|INFO Herunterfahren von Backupserver erfolgreich"
echo "$datum $zeit Uhr|############################## Anwendung beendet ####################################"
exit 0
fi
else
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr|FEHLER Backupserver konnte nicht gestartet werden"
echo "$datum $zeit Uhr|FEHLER Backup fehlgeschlagen - beende Anwendung"
echo "$datum $zeit Uhr|############################## Anwendung beendet ####################################"
exit 1
fi
fi
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr| ############################## Anwendung beendet ####################################"
}
main >$logfile
/var/packages/HyperBackup/target/bin/synonetbkp --backup -k <task ID>
<?php
$dbname="";
$dbhost="10.11.1.13";
$dbuser="backup";
$dbpass="backup";
mysql_connect($dbhost,$dbuser,$dbpass);
//mysql_select_db($dbname);
$date = date('Y-m-d');
$datebase = $date."-".$argv[0];
//Wir erstellen die DB
$sql_cmd = "CREATE DATABASE ".$database.";";
mysql_query($sql_cmd);
mysql_close();
?>
#!/bin/sh
datum="`date +%Y-%m-%d`"
zeit="`date +%H:%M:%S`"
NOW=$(date +"%F")
logfile="/volume1/scripts_logs/logs/mariaDB_backup.log"
logs=$(cat $logfile)
main()
{
echo "$logs"
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr | Sichere MariaDB spritpreisrechner"
mysqldump --opt -u backup -pbackup spritpreisrechner > /volume1/backup/$datum-spritpreisrechner.sql
zeit="`date +%H:%M:%S`"
echo "$datum $zeit Uhr | Importiere spritpreisrechner Dump in MariaDB des Backupservers"
# Jetzt rufen wir das PHP Skript zur Anlage der DB auf
curl "http://localhost/system/scripts/createDB.php?dbname=spritpreisrechner";
mysql -h 10.11.1.13 -u backup -pbackup $datum-spritpreisrechner < /volume1/backup/$datum-spritpreisrechner.sql
rm -f /volume1/backup/$datum-spritpreisrechner.sql
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
exit 0;
}
main >$logfile
chown -R backup:users /volume1/backup/MariaDB
chmod -R 775 /volume1/backup/MariaDB
chown -R backup:users /volume1/scripts_logs/logs/$logfile
chmod -R 775 /volume1/scripts_logs/logs/$logfile
Die 2 neuen (alten) Symbole befinden sich leider ganz unten in der Liste. Synology hat für die in DSM 6 eingeführte Methode keinen neuen Icons erstellt, deswegen habe ich zur Unterscheidung den Zusatz (DSM 5) hinzugefügt).
Wichtig: In DSM 6.0 Final kann sich das natürlich wieder ändern. Die Änderungen müssen bei einer Neuinstallation oder Update des Paketes "HyperBackup" erneut durchgeführt werden.
Neustart mind. des Paketes bzw. ggf. der NAS durchgeführt?
Doch, als Ergänzungen (Post #1 unten) habe ich auch ein Backup zu einer anderen DS getestet und auch die Änderungen aufgelistet, Methode 2 ist aber eh besser.Abgesehen davon, dass im diesem Thread keine Rede vom Backup auf einen anderen Syno Server ist, habe ich es auch mal versucht.
besorge dir Notepad++ oder PSPad, damit sollte es funktionieren. Die gibt es beide als Portable Version, also keine Installation notwendig. Achte nur darauf, das du die Zeilen nicht umbrichst und die Zeilenendekennung auf nur LF (Linux) steht. Ansonsten gäbe es noch Methode 3Version 2 habe ich durchgeführt, jetzt startet HyperBackup jedoch gar nicht mehr
Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.
Als Dankeschön schalten wir deinen Account werbefrei.