Inhaltsverzeichnis
Repository spiegeln CentOS 6
RPM (Package Manager) ist ein freies (GPL) Software-Paketverwaltungssystem, welches ursprünglich von ein prominenten Nord-Amerikanischen Linux-Distributor Red Hat entwickelt worden ist. Eine Sammlung von vielen RPM-Paketen stellt das sogenannte Repository dar, welches unter Zuhilfenahme eines Paket-Management Programms, wie z.B. YUM (Yellow Dog Updater) zur Aktualisierung von z.B. CentOS verwendet werden kann.
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Vorbereitungen
Nachfolgend soll beschrieben werden, wie ein Spiegel eines öffentlichen Repositories, erstellt werden kann und aktuell gehalten werden kann. In diesem Fall sollen das
- CentOS-Repository ab der Version 6.0 in der Architektur 64-bit
auf eine lokale Festplatte gespiegelt werden.
Der Datentransfer soll von einem öffentlichen Spiegel des CentOS-Repository täglich aktualisiert werden. Eine Auswahl an öffentlichen CentOS-Repository-Spiegeln kann unter nachfolgenden Links ermittelt und deren Status eingesehen werden:
Im konkreten Fall hier, sollen die Daten von nachfolgendem Server der Hochschule Esslingen transferiert werden:
Ziel Verzeichnisstruktur erstellen
Bevor mit den Spiegeln eines CentOS-Repository von einem öffentlichen Spiegel begonnen werden kann, sollte zuerst die Verzeichnisstruktur erstellt werden, in die der Inhalt des CentOS-Repository auf der lokalen Festplatte gespeichert werden soll, was mit nachfolgenden Befehlen durchgeführt werden kann:
# cd / # mkdir -p /data/repository/pub/Mirrors/centos/6.0
HINWEIS - Die Option -p
beim Befehl mkdir
legt alle Unterverzeichnisse ebenfalls an, wenn diese nicht bereits bestehen!
Um später bei den Änderungen der Definition in z.B. der Konfigurationsdatei
/etc/yum.repos.d/CentOS-Base.repo
keine Probleme mit der Auflösung des Suchpfades für die RPM-Pakete zu haben, sollte nachfolgender symbolische Links mit nachfolgendem Befehl angelegt werden:
# ln -fs /data/repository/pub/Mirrors/centos/6.0 /data/repository/pub/Mirrors/centos/6
Die Ausgabe der Verzeichnisse im Verzeichniss /data/repository/pub/Mirrors/centos
mit nachfolgendem Befehl, sollte eine Ausgabe in etwa wie nachfolgend dargestellt ergeben:
# ls -l /data/repository/pub/Mirrors/centos total 4 lrwxrwxrwx 1 root root 39 Oct 12 12:45 6 -> /data/repository/pub/Mirrors/centos/6.0 drwxrwxr-x 2 406 75 4096 Oct 11 17:58 6.0
Installation
Zur Synchronisation eines CentOS-Repository von einem öffentlichen Spiegel, soll der Befehl
rsync
zum Einsatz kommen.
Falls der oben genannte Befehl noch nicht Bestandteil des installierten Betriebssystems ist, was z.B. bei der Installation von CentOS in der Version 6.0 - mit der Vorgabe minimal - Installation der Fall ist, wird nachfolgendes Paket benötigt:
Mit nachfolgendem Befehl, wird das Pakete rsync
installiert:
# yum install rsync Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.softaculous.com * extras: mirror.softaculous.com * updates: mirror.softaculous.com Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package rsync.x86_64 0:3.0.6-5.el6_0.1 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: rsync x86_64 3.0.6-5.el6_0.1 updates 335 k Transaction Summary ================================================================================ Install 1 Package(s) Upgrade 0 Package(s) Total download size: 335 k Installed size: 683 k Is this ok [y/N]: y Downloading Packages: rsync-3.0.6-5.el6_0.1.x86_64.rpm | 335 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : rsync-3.0.6-5.el6_0.1.x86_64 1/1 Installed: rsync.x86_64 0:3.0.6-5.el6_0.1 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap-clients
installiert wurden.
# rpm -qil rsync [root@vml000040 ~]# rpm -qil rsync Name : rsync Relocations: (not relocatable) Version : 3.0.6 Vendor: CentOS Release : 5.el6_0.1 Build Date: Sat 25 Jun 2011 12:58:57 PM CEST Install Date: Tue 11 Oct 2011 05:14:05 PM CEST Build Host: c6b6.bsys.dev.centos.org Group : Applications/Internet Source RPM: rsync-3.0.6-5.el6_0.1.src.rpm Size : 699126 License: GPLv3+ Signature : RSA/8, Wed 06 Jul 2011 03:45:52 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://rsync.samba.org/ Summary : A program for synchronizing files over a network Description : Rsync uses a reliable algorithm to bring remote and host files into sync very quickly. Rsync is fast because it just sends the differences in the files over the network instead of sending the complete files. Rsync is often used as a very powerful mirroring process or just as a more capable replacement for the rcp command. A technical report which describes the rsync algorithm is included in this package. /etc/xinetd.d/rsync /usr/bin/rsync /usr/share/doc/rsync-3.0.6 /usr/share/doc/rsync-3.0.6/COPYING /usr/share/doc/rsync-3.0.6/NEWS /usr/share/doc/rsync-3.0.6/OLDNEWS /usr/share/doc/rsync-3.0.6/README /usr/share/doc/rsync-3.0.6/support /usr/share/doc/rsync-3.0.6/support/Makefile /usr/share/doc/rsync-3.0.6/support/atomic-rsync /usr/share/doc/rsync-3.0.6/support/cvs2includes /usr/share/doc/rsync-3.0.6/support/deny-rsync /usr/share/doc/rsync-3.0.6/support/file-attr-restore /usr/share/doc/rsync-3.0.6/support/files-to-excludes /usr/share/doc/rsync-3.0.6/support/git-set-file-times /usr/share/doc/rsync-3.0.6/support/logfilter /usr/share/doc/rsync-3.0.6/support/lsh /usr/share/doc/rsync-3.0.6/support/mnt-excl /usr/share/doc/rsync-3.0.6/support/munge-symlinks /usr/share/doc/rsync-3.0.6/support/rrsync /usr/share/doc/rsync-3.0.6/support/rsyncstats /usr/share/doc/rsync-3.0.6/support/savetransfer.c /usr/share/doc/rsync-3.0.6/tech_report.tex /usr/share/man/man1/rsync.1.gz /usr/share/man/man5/rsyncd.conf.5.gz
Befehl: rsync
Mit nachfolgendem Befehl, könnte nun ein komplettes CentOS-Repository von einem öffentlichen Spiegel transferiert und synchronisiert werden:
HINWEIS - Bitte NICHT oder nur mit Bedacht ausführen, da hier, je nach eigener Anbindung ans Internet, eine sehr lange Datentransferzeit zu erwarten ist !!!
# /usr/bin/rsync -varlHt --progress --delete-after --delay-updates --timeout=300 --exclude SRPMS/ ftp-stud.fht-esslingen.de::pub/Mirrors/centos/6.0/ /data/repository/pub/Mirrors/centos/6.0/
Agenda der verwendeten Optionen
-v
-–verbose
- Ausgabe von Laufzeitinformationen-a
-–archive
- Archiv-Modus-r
-–recursive
- Die Verzeichnisse rückwärts durchsuchen-l
-–links
- Kopiere symbolische Links als symbolische Links-H
-–hard-links
- Erhalte „hard“ Links-t
-–times
- Erhalte ursprüngliche Zeitangaben–progress
- Fortschrittsanzeige anzeigen–delete-after
- Führe Löschungen erst nach den Änderungen durch, nicht vorher–delay-updates
- Führe alle Änderungen erst am Ende des Datentransfers durch (Zwischenspeicherung in.~tmp~
)–timeout=300
- Zeitablauf für Operationen in Sekunden–exclude SRPMS/
- Nachfolgende AngabeSRPMS/
nicht mit einbeziehen
HINWEIS - Zum Test der Verbindung, kann nachfolgender Befehl verwendet werden, welcher nur den Inhalt des Verzeichnisses:
transferieren würde!
# /usr/bin/rsync -varlHt --progress --delete-after --delay-updates --timeout=300 --exclude SRPMS/ ftp-stud.fht-esslingen.de::centos/6.0/os/x86_64/repodata/ /data/repository/pub/Mirrors/centos/6.0 Welcome to the ftp-stud.hs-esslingen.de archives. If have any unusual problems, please report them via e-mail to rsync@ftp-stud.hs-esslingen.de. All transfers are logged. If you don't like this policy, then disconnect now. This server does not support --checksum (-c) This server does not support --compress (-z) receiving file list ... 10 files to consider ./ 0616ab64cf1d108977abdd8ebff9cf8ac73cf215671fdc25005534ba1c526d9b-filelists.xml.gz 5214585 100% 1.16MB/s 0:00:04 (xfer#1, to-check=8/10) 265ef017ca113fd1d2d17e161666da3470802c741e71fa1a3d349b9152938d12-primary.sqlite.bz2 4402551 100% 1.12MB/s 0:00:03 (xfer#2, to-check=7/10) 2a7e0c1da38a40e2961c0cec6acca8b8446d974b1fc055216ebde88bb4a19eb9-c6-x86_64-comps.xml 1210055 100% 693.89kB/s 0:00:01 (xfer#3, to-check=6/10) 4ca3fe24be9a737f78adcf4971c895556f79a025d92c4d9aec1d5a3775ccea5f-filelists.sqlite.bz2 5873017 100% 1.05MB/s 0:00:05 (xfer#4, to-check=5/10) 80c918e87188ac5bba893df689108bb3f43ba2d2a7d36eb3094acdc851025ef7-primary.xml.gz 2483042 100% 1.06MB/s 0:00:02 (xfer#5, to-check=4/10) c195c276191c3d9fb5d6b3fcafaab74a02315673a2bc539f188d41ef93bd55da-other.sqlite.bz2 2449590 100% 1.10MB/s 0:00:02 (xfer#6, to-check=3/10) e601759c6eed524aa4d8c5267f087f6c72491e3d811b3c937438e7a9b0747130-c6-x86_64-comps.xml.gz 212402 100% 759.79kB/s 0:00:00 (xfer#7, to-check=2/10) eed14f8f3d6042d45e7168586925e717a880ae91e7b9adbeadcb26ef4a2976e5-other.xml.gz 2658094 100% 1.08MB/s 0:00:02 (xfer#8, to-check=1/10) repomd.xml 3825 100% 10.76kB/s 0:00:00 (xfer#9, to-check=0/10) sent 228 bytes received 24511650 bytes 1195701.37 bytes/sec total size is 24507161 speedup is 1.00
Mit nachfolgendem Befehl, kann der so eben transferierte Inhalt, angezeigt werden:
# ls -la /data/repository/pub/Mirrors/centos/6.0 total 23956 drwxrwxr-x 2 406 75 4096 Jul 9 18:19 . drwxr-xr-x 3 root root 4096 Oct 12 12:45 .. -rw-rw-r-- 1 406 75 5214585 Jul 9 18:18 0616ab64cf1d108977abdd8ebff9cf8ac73cf215671fdc25005534ba1c526d9b-filelists.xml.gz -rw-rw-r-- 1 406 75 4402551 Jul 9 18:19 265ef017ca113fd1d2d17e161666da3470802c741e71fa1a3d349b9152938d12-primary.sqlite.bz2 -rw-rw-r-- 1 406 75 1210055 Jul 9 18:19 2a7e0c1da38a40e2961c0cec6acca8b8446d974b1fc055216ebde88bb4a19eb9-c6-x86_64-comps.xml -rw-rw-r-- 1 406 75 5873017 Jul 9 18:19 4ca3fe24be9a737f78adcf4971c895556f79a025d92c4d9aec1d5a3775ccea5f-filelists.sqlite.bz2 -rw-rw-r-- 1 406 75 2483042 Jul 9 18:18 80c918e87188ac5bba893df689108bb3f43ba2d2a7d36eb3094acdc851025ef7-primary.xml.gz -rw-rw-r-- 1 406 75 2449590 Jul 9 18:18 c195c276191c3d9fb5d6b3fcafaab74a02315673a2bc539f188d41ef93bd55da-other.sqlite.bz2 -rw-rw-r-- 1 406 75 212402 Jul 9 18:19 e601759c6eed524aa4d8c5267f087f6c72491e3d811b3c937438e7a9b0747130-c6-x86_64-comps.xml.gz -rw-rw-r-- 1 406 75 2658094 Jul 9 18:18 eed14f8f3d6042d45e7168586925e717a880ae91e7b9adbeadcb26ef4a2976e5-other.xml.gz -rw-rw-r-- 1 406 75 3825 Jul 9 18:19 repomd.xml
HINWEIS - Mit nachfolgendem Befehl sollte der so eben transferierte Inhalt, wieder gelöscht werden, da dies NUR ein Test sein sollte, und sich die Daten im FALSCHEN Verzeichnis befinden !!!:
# rm /data/repository/pub/Mirrors/centos/6.0/* -f
Script: rsync_centos60.sh
Mit nachfolgendem Script, kann nun z.B. Zeitgesteuert durch einen cron
-Job die Synchronisation durchgeführt werden.
HINWEIS - Bitte bei der ERSTEN Ausführung bedenken, dass je nach eigener Anbindung ans Internet, eine sehr lange Datentransferzeit zu erwarten ist !!!
WICHTIG - Bei einer eignen Internetanbindung mit hoher Bandbreite sollte noch der rsync
-Parameter (RSYNC_CMDOPTS)
--bwlimit=900
= Max. Datentransfer Geschwindigkeit 900 KB
hinzugefügt werden, um in diesem Beispiel die CentOS Mirror - Hochschule Esslingen nicht zu sehr mit dem Datentransfer zu belasten!!!
Der Inhalt des Scripts, sieht wie folgt aus:
#!/bin/bash ############################################################################## # Script-Name : rsync_centos60.sh # # Description : Script to sync via rsync command repositorys from official # # mirror servers. On successful execution only a LOG file will # # be written. On error while execution, a LOG file and a error # # message will be send by e-mail. # # # # Last update : 11.10.2011 # # Version : 1.00 # # # # Author : Klaus Tachtler, <klaus@tachtler.net> # # DokuWiki : http://www.dokuwiki.tachtler.net # # Homepage : http://www.tachtler.net # # # # Base script : centos6.0_mirror.sh, Copyright (c) 2004-2011 # # created by : Georg Kainzbauer, <georgkainzbauer@gmx.net> # # Homepage : http://www.gtkdb.de # # # # +----------------------------------------------------------------------+ # # | This program is free software; you can redistribute it and/or modify | # # | it under the terms of the GNU General Public License as published by | # # | the Free Software Foundation; either version 2 of the License, or | # # | (at your option) any later version. | # # +----------------------------------------------------------------------+ # # # # Copyright (c) 2011 by Klaus Tachtler. # # # ############################################################################## ############################################################################## # H I S T O R Y # ############################################################################## # Version : x.xx # # Description : <Description> # # -------------------------------------------------------------------------- # # Version : x.xx # # Description : <Description> # # -------------------------------------------------------------------------- # ############################################################################## ############################################################################## # >>> Please edit following lines for personal command and/or repositorys. ! # ############################################################################## # CUSTOM - Script-Name. SCRIPT_NAME='rsync_centos60' # CUSTOM - Command-Line. RSYNC_CMDOPTS='-varlHt --progress --delete-after --delay-updates --timeout=300' RSYNC_EXCLUDE='--exclude */SRPMS/ --exclude isos/' # CUSTOM - Repository-Mirrors. REPO_SOURCE='ftp-stud.fht-esslingen.de::centos/6.0/' REPO_TARGET='/data/repository/private/Mirrors/centos/6.0/' LINK_TARGET='/data/repository/private/Mirrors/centos/6' # CUSTOM - Mail-Recipient. MAIL_RECIPIENT='root@tachtler.net' # CUSTOM - Status-Mail [Y|N]. MAIL_STATUS='Y' ############################################################################## # >>> Normaly there is no need to change anything below this comment line. ! # ############################################################################## # Variables. RSYNC_COMMAND=`command -v rsync` TOUCH_COMMAND=`command -v touch` RM_COMMAND=`command -v rm` PROG_SENDMAIL=`command -v sendmail` CAT_COMMAND=`command -v cat` DATE_COMMAND=`command -v date` MKDIR_COMMAND=`command -v mkdir` LN_COMMAND=`command -v ln` FILE_LOCK='/tmp/'$SCRIPT_NAME'.lock' FILE_LOG='/var/log/'$SCRIPT_NAME'.log' FILE_LAST_LOG='/tmp/'$SCRIPT_NAME'.log' FILE_MAIL='/tmp/'$SCRIPT_NAME'.mail' VAR_HOSTNAME=`uname -n` VAR_SENDER='root@'$VAR_HOSTNAME VAR_EMAILDATE=`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'` # Functions. function log() { echo $1 echo `$DATE_COMMAND '+%Y/%m/%d %H:%M:%S'` " INFO:" $1 >>${FILE_LAST_LOG} } function retval() { if [ "$?" != "0" ]; then case "$?" in 1) log "ERROR: Syntax or usage error" ;; 2) log "ERROR: Protocol incompatibility" ;; 3) log "ERROR: Errors selecting input/output files, dirs" ;; 4) log "ERROR: Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that cannot support them; or an option was specified that is supported by the client and not by the server." ;; 5) log "ERROR: Error starting client-server protocol" ;; 6) log "ERROR: Daemon unable to append to log-file" ;; 10) log "ERROR: Error in socket I/O" ;; 11) log "ERROR: Error in file I/O" ;; 12) log "ERROR: Error in rsync protocol data stream" ;; 13) log "ERROR: Errors with program diagnostics" ;; 14) log "ERROR: Error in IPC code" ;; 20) log "ERROR: Received SIGUSR1 or SIGINT" ;; 21) log "ERROR: Some error returned by waitpid()" ;; 22) log "ERROR: Error allocating core memory buffers" ;; 23) log "ERROR: Partial transfer due to error" ;; 24) log "ERROR: Partial transfer due to vanished source files" ;; 25) log "ERROR: The --max-delete limit stopped deletions" ;; 30) log "ERROR: Timeout in data send/receive" ;; *) log "ERROR: Unknown error $?" ;; esac fi } function movelog() { $CAT_COMMAND $FILE_LAST_LOG >> $FILE_LOG $RM_COMMAND -f $FILE_LAST_LOG $RM_COMMAND -f $FILE_LOCK } function sendmail() { case "$1" in 'STATUS') MAIL_SUBJECT='Status execution '$SCRIPT_NAME' script.' ;; *) MAIL_SUBJECT='ERROR while execution '$SCRIPT_NAME' script !!!' ;; esac $CAT_COMMAND <<MAIL >$FILE_MAIL Subject: $MAIL_SUBJECT Date: $VAR_EMAILDATE From: $VAR_SENDER To: $MAIL_RECIPIENT MAIL $CAT_COMMAND $FILE_LAST_LOG >> $FILE_MAIL $PROG_SENDMAIL -f $VAR_SENDER -t $MAIL_RECIPIENT < $FILE_MAIL $RM_COMMAND -f $FILE_MAIL } # Main. log "" log "+-----------------------------------------------------------------+" log "| Start synchronisation from official repository server (mirror). |" log "+-----------------------------------------------------------------+" log "" log "Run script with following parameter:" log "" log "SCRIPT_NAME...: $SCRIPT_NAME" log "" log "RSYNC_CMDOPTS.: $RSYNC_CMDOPTS" log "RSYNC_EXCLUDE.: $RSYNC_EXCLUDE" log "" log "REPO_SOURCE...: $REPO_SOURCE" log "REPO_TARGET...: $REPO_TARGET" log "LINK_TARGET...: $LINK_TARGET" log "" log "MAIL_RECIPIENT: $MAIL_RECIPIENT" log "MAIL_STATUS...: $MAIL_STATUS" log "" # Check if command (file) NOT exist OR IS empty. if [ ! -s "$RSYNC_COMMAND" ]; then log "Check if command '$RSYNC_COMMAND' was found................[FAILED]" sendmail ERROR movelog exit 10 else log "Check if command '$RSYNC_COMMAND' was found................[ OK ]" fi # Check if command (file) NOT exist OR IS empty. if [ ! -s "$TOUCH_COMMAND" ]; then log "Check if command '$TOUCH_COMMAND' was found....................[FAILED]" sendmail ERROR movelog exit 11 else log "Check if command '$TOUCH_COMMAND' was found....................[ OK ]" fi # Check if command (file) NOT exist OR IS empty. if [ ! -s "$RM_COMMAND" ]; then log "Check if command '$RM_COMMAND' was found.......................[FAILED]" sendmail ERROR movelog exit 12 else log "Check if command '$RM_COMMAND' was found.......................[ OK ]" fi # Check if command (file) NOT exist OR IS empty. if [ ! -s "$CAT_COMMAND" ]; then log "Check if command '$CAT_COMMAND' was found......................[FAILED]" sendmail ERROR movelog exit 13 else log "Check if command '$CAT_COMMAND' was found......................[ OK ]" fi # Check if command (file) NOT exist OR IS empty. if [ ! -s "$DATE_COMMAND" ]; then log "Check if command '$DATE_COMMAND' was found.....................[FAILED]" sendmail ERROR movelog exit 14 else log "Check if command '$DATE_COMMAND' was found.....................[ OK ]" fi # Check if command (file) NOT exist OR IS empty. if [ ! -s "$MKDIR_COMMAND" ]; then log "Check if command '$MKDIR_COMMAND' was found....................[FAILED]" sendmail ERROR movelog exit 15 else log "Check if command '$MKDIR_COMMAND' was found....................[ OK ]" fi # Check if command (file) NOT exist OR IS empty. if [ ! -s "$LN_COMMAND" ]; then log "Check if command '$LN_COMMAND' was found.......................[FAILED]" sendmail ERROR movelog exit 16 else log "Check if command '$LN_COMMAND' was found.......................[ OK ]" fi # Check if command (file) NOT exist OR IS empty. if [ ! -s "$PROG_SENDMAIL" ]; then log "Check if command '$PROG_SENDMAIL' was found............[FAILED]" sendmail ERROR movelog exit 17 else log "Check if command '$PROG_SENDMAIL' was found............[ OK ]" fi # Check if LOCK file NOT exist. if [ ! -e "$FILE_LOCK" ]; then log "Check if script is NOT already runnig .....................[ OK ]" $TOUCH_COMMAND $FILE_LOCK else log "Check if script is NOT already runnig .....................[FAILED]" log "" log "ERROR: The script was already running, or LOCK file already exists!" log "" sendmail ERROR movelog exit 20 fi # Check if REPO_TARGET Directory NOT exists. if [ ! -d "$REPO_TARGET" ]; then log "Check if REPO_TARGET exists................................[FAILED]" log "" log " INFO: Creating REPO_TARGET!" log " INFO: --> "$REPO_TARGET log "" $MKDIR_COMMAND -p $REPO_TARGET else log "Check if REPO_TARGET exists................................[ OK ]" fi # Check if LINK_TARGET symbolic Link NOT exists. if [ ! -L "$LINK_TARGET" ]; then log "Check if LINK_TARGET exists................................[FAILED]" log "" log " INFO: Creating LINK_TARGET!" log " INFO: --> "$LINK_TARGET log "" $LN_COMMAND -fs $REPO_TARGET $LINK_TARGET else log "Check if LINK_TARGET exists................................[ OK ]" fi # Start syncing. log "" log "+-----------------------------------------------------------------+" log "| Run synchronizing $SCRIPT_NAME repository.................... |" log "+-----------------------------------------------------------------+" log "" log "$RSYNC_COMMAND $RSYNC_CMDOPTS $RSYNC_EXCLUDE $REPO_SOURCE $REPO_TARGET" $RSYNC_COMMAND $RSYNC_CMDOPTS --log-file=$FILE_LAST_LOG $RSYNC_EXCLUDE $REPO_SOURCE $REPO_TARGET if [ "$?" != 0 ]; then retval $? log "" $RM_COMMAND -f $FILE_LOCK sendmail ERROR movelog exit 99 else log "" log "+-----------------------------------------------------------------+" log "| End synchronizing $SCRIPT_NAME repository.................... |" log "+-----------------------------------------------------------------+" log "" fi # Finish syncing. log "+-----------------------------------------------------------------+" log "| Finish......................................................... |" log "+-----------------------------------------------------------------+" log "" # Status e-mail. if [ $MAIL_STATUS = 'Y' ]; then sendmail STATUS fi # Move temporary log to permanent log movelog exit 0
Das Script hat folgende WICHTIGE Merkmale:
- Konfigurierbare Parameter
- Überprüfung ob alle Befehle zur erfolgreichen Ausführung verfügbar sind (Evtl. wichtig für Portierungen)
- Ausführungsschutz, kein doppelte, gleichzeitige Ausführen des Scripts
- Ausgabe von Laufzeitinformationen
- auf dem Bildschirm zur Laufzeit
- als LOG-Datei
- als e-Mail
- e-Mail Benachrichtigung im Fehlerfall
- optional e-Mail Benachrichtigung bei erfolgreicher Ausführung
Einbindung als cron-job
Nachfolgend soll das oben genannte Script als cron
-Job mit täglicher (nächtlicher) Ausführung eingerichtet werden.
Dazu sollte als erstes nachfolgendes Verzeichnis
/root/bin
mit nachfolgendem Befehl erstellt werden:
# mkdir /root/bin/
Anschließend sollte das Script, in dem mit obigem Befehl erstellte Verzeichnis hinterlegt werden. Das Verzeichnis sollte wie folgt aussehen, was mit nachfolgendem Befehl überprüft werden kann:
# ls -la /root/bin/ total 24 drwxr-xr-x 2 root root 4096 Oct 13 18:23 . dr-xr-x---. 4 root root 4096 Oct 13 18:20 .. -rwxr-xr-x 1 root root 15491 Oct 13 18:28 rsync_centos60.sh
Evtl. sollten noch die Dateirechte mit nachfolgendem Befehl, wie folgt angepasst werden:
# chmod 750 /root/bin/rsync_centos60.sh
Eine erneute Abfrage des Verzeichnisses mit nachfolgendem Befehl sollte dann eine Ausgabe in etwa wie folgende ergeben:
# ls -la total 24 drwxr-xr-x 2 root root 4096 Oct 13 18:23 . dr-xr-x---. 4 root root 4096 Oct 13 18:20 .. -rwxr-x--- 1 root root 15491 Oct 13 18:28 rsync_centos60.sh
1. Möglichkeit
Einbindung des Scripts zur Ausführung als cron
-job in die Konfigurationsdatei
/etc/crontab
welches in diesem Fall eine Ausführung des Scripts täglich um 04:02 Uhr (nachts) veranlassen würde.
Was durch hinzufügen von nachfolgender Zeile zur Konfigurationsdatei /etc/crontab
erfolgen kann (nur relevanter Ausschnitt):
... 02 04 * * * root /root/bin/rsync_centos60.sh ...
2. Möglichkeit
Einbindung eines Links auf das Scripts, zur Ausführung als cron
-job in das Verzeichnis
/etc/cron.daily
welches in diesem Fall eine Ausführung des Scripts täglich je nach Konfiguration in der Konfigurationsdatei
/etc/anacrontab
hier als Standard zwischen 03:00-22:00 Uhr, mit einer addierten Zufälligkeit von 45 Minuten und einer zufälligen Abweichung von 5 Minuten veranlassen würde.
Dies kann durch Ausführen des nachfolgenden Befehls erfolgen:
# ln -fs /root/bin/rsync_centos60.sh /etc/cron.daily/rsync_centos60.sh
Zu Überprüfung, ob der Link korrekt erstellt wurde, kann nachfolgender Befehl ausgeführt werden:
# ls -l /etc/cron.daily total 8 -rwxr-xr-x. 1 root root 196 Jun 25 13:18 logrotate -rwxr-xr-x. 1 root root 905 Nov 11 2010 makewhatis.cron lrwxrwxrwx 1 root root 27 Oct 18 14:13 rsync_centos60.sh -> /root/bin/rsync_centos60.sh
Logrotate
Das Script /root/bin/rsync_centos60.sh
erzeugt eine LOG-Datei mit nachfolgender Bezeichnung und folgendem Speicherort:
/var/log/rsync_centos60.sh
Um das stetige Anwachsen und die Größe dieser LOG-Datei nicht ins unendliche zu treiben, wäre es sinnvoll die LOG-Datei mit Linux-Bordmitteln in regelmäßigen Abständen zu rotieren.
Dies kann durch die Anlage eines neuen, nachstehend gezeigten Scripts, erfolgen. Der Speicherort muss hier:
/etc/logrotate.d
sein und das Script kann folgenden Namen tragen:
rsync_centos60
Der Inhalt des Scripts /etc/logrotate.d/rsync_centos60
sieht folgendermaßen aus:
/var/log/rsync_centos60.log { weekly rotate 4 compress delaycompress missingok notifempty }
Demnach wird die LOG-Datei nach nachfolgenden Regeln rotiert:
weekly
- wöchentlichrotate 4
- die letzten 4 LOG-Dateien sollen jeweils erhalten bleibencompress
- Alte Versionen der LOG-Datei werden komprimiertdelaycompress
- Verschiebt die Kompression des letzten LOG-Datei auf den nächsten Rotationszyklusmissingok
- Das nicht vorhanden sein der LOG-Datei soll zu keinem Fehler führennotifempty
- Nicht rotieren, wenn die LOG-Datei leer ist