Posts Tagged ‘ Bash

Automatisiertes Sichern mit rsync und cronjob

Rsync-Skript

Das Skript ist für die automatische Sicherung von beliebigen Ordner zuständig und durch verschiedene Parameter konfigurierbar. Die Parameter und deren Bedeutung sind folgende:

  • SOURCE – Quellordner
  • TARGET – Zielordner
  • RSYNCCONF – Parameter zum vollen Synchronisieren
  • RSYNC – Speicherort der Binärdatei von „rsync“

Sind alle Parameter konfiguriert, kann das Skript ausgeführt werden.

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
#!/bin/bash
#
# Automatisches Sichern von speziellen anzugebenden Ordner
# mit Hilfe von "rsync" und cronjob
#
# Angabe der Ordner die gesichert werden soll.
# ACHTUNG
# /[Ordner]/ -> Inhalt des Ordners wird gesichert
# /[Ordner] -> Ordner wird gesichert
SOURCES="/home/[USER]/Dokumente /home/[USER]/Downloads"

# Ziel des Backups auf dem entfernten Rechner.
# Benötigt SSH-Key-Exchange
TARGET="root@[REMOTE]:/home/backup/"

# Parameter zum Synchronisieren
# --delete bewirkt ein Datenabgleich inklusive Löschen auf dem Backupmedium
RSYNCCONF="--delete"

# Dateiname des Logfile
LOGFILE="rsync_log.log"

# Ort der Binär-Datei von "rsync"
RSYNC=`which rsync`

# Befehl
$RSYNC -avrpuE $RSYNCCONF $SOURCES $TARGET > $LOGFILE

exit 0

Tipp

Für eine reibungslose  Sicherung der Dateien und Ordner sollten für die Anmeldung auf dem Remote-System vorher ein SSH-Key-Exchange durchgeführt werden, damit man kein Passwort im Skript hinterlegen muss.

Cronjob

Damit man eine Automatisierung erreicht, muss das Skript regelmäßig ausgeführt werden. Dafür eignet sich ein Cronjob unter Linux bestens. Die generelle Gliederung der Zeitangaben ist die folgende:

* * * * * auszuführender Befehl
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └──── Wochentag (0-7) (Sonntag =0 oder =7)
│ │ │ └────── Monat (1-12)
│ │ └──────── Tag (1-31)
│ └────────── Stunde (0-23)
└──────────── Minute (0-59)

Exemplarisch soll das Skript immer in der Mittagspause durchgeführt werden. Damit ist gewährleistet das der Rechner im Betrieb ist und er mit hoher Wahrscheinlichkeit nichts zutun hat. Ein Cronjob für die Ausführung des Skript täglich um 12 Uhr sieht wie folgt aus:

1
0 12 * * * /home/[USER]/Dokumente/rsync_script.sh

Download

Rsync-Script

Rechte

Rechte ändern nicht vergessen. Das Skript muss ausführbar sein.

1
chmod +x /home/[USER]/Dokumente/rsync_script.sh

Chroot-Umgebung

Startet ein Linux System nicht mehr, kann es sein das Updates mit einem neuen Kernel, Grafikkarten Treibern oder Einstellungen für den Grub eingespielt worden sind. Man sieht dann im schlimmsten Fall nur noch einen schwarzen Bildschirm und hat indirekt keinen Zugriff mehr auf das System.

Zum Glück ist es kein Windows-System und somit halb so wild.

[Vorgehen]
Man startet seinen PC oder Notebook mit einer Live-CD einer Linux-Distribution seiner Wahl. Mögliche Varianten sind Kubuntu, Knoppix, Backtrack etc.

Ist das System hochgefahren, speichert man das folgende Script in einer Datei und führt es aus.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
#
# Initieren einer Chroot-Umgebung
# und hineinwechseln
# !Need to be Root!

if [ "$1" != "" ]; then
    mkdir /media/target
    mount "$1" /media/target
    mount -o bind /dev /media/target/dev
    mount -o bind /sys /media/target/sys
    mount -t proc /proc /media/target/proc
    chroot /media/target/
else
    echo "Usage:    ./script.sh [DEVICE]"
    echo "Device    - Root-Partition (/dev/sda1)"
    echo "Example:  - ./script.sh /dev/sda1"   
fi

Danach hat man vollen Zugriff auf sein System als Benutzer „root“ und kann die Pakete/Updates entfernen!

[Speichern des Scriptes – Konsole]

1
nano script.sh

Copy & Paste – Strg + x

1
2
chmod +x script.sh
sudo ./script.sh

[Download]
chroot-umgebung – Umbenennen in chroot-umgebung.sh

Subversion Projekt-Daten entfernen

Bei größeren Software Projekten werden meistens Versionskontrollsysteme aka SVN eingesetzt. Jedoch kommt es ab und zu vor, dass sich Fehler beim „Checkout“ und „Commit“ einschleichen, oder man sein Projekt ohne das Versionskontrollsystem kopieren muss.

SVN legt im Projekt rekursiv versteckte Ordner mit dem Namen „.svn“ an. Möchte man diese nun vollständig löschen, kann man manuell alle Ordner durchsuchen und die SVN-Ordner löschen oder man macht sich das Unix System zu nutze (Vorausgesetzt man arbeitet mit einem!) und führt die verketteten Befehle aus.

1
find ./ -type d -name ".svn" -exec rm -Rf {} \;

Der Befehl durchsucht alle Ordner ab dem Verzeichnis in dem man sich befindet und löscht die SVN-Ordner Strukturen.

Bei mir hat das Script bisher nützliche Dienste geleistet, jedoch:

[Achtung]
Ich übernehme keine Gewähr oder Haftung wenn was schiefgeht und euer Projekt gelöscht wird.

Scripting – Die Bash unter Linux

Wie jeder weiß, Linux ist was tolles. So auch natürlich die Programme auf diesem Betriebssystem. Die Bash ist nun eins davon, welches zugleich auch eine zentrale Aufgabe hat. Das Schöne und immer wieder Nützliche an der Bash ist die Einfachheit und Schnelligkeit, mit der sich Aufgaben die man nur langsamer unter einer GUI (KDE oder GNOME) hätte machen können, erledigen lassen.

Ein Skript welches ich mittlerweile schon öftes gebraucht habe, will ich hier einmal vorstellen. Es ist, wie man sehen kann ziemlich simpel aufgebaut. Zu Funktion kann man sagen, das es alle Dateien in einem Verzeichnis, wo auch das Skript liegt, nach einer bestimmten Endung durcharbeitet und unter anderem Dateinamen wieder ablegt.

In dem gezeigten Skript werden, wenn man es auf der Konsole mit [./script.sh wav mp3] startet, alle Dateien der Endung „wav“ werden mit ffmpeg in einer Rate von 192kbps kodiert und unter dem selben Dateinamen jedoch mit der Endung „mp3“ abgespeichert.

Skript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
#
# Umwandeln von Audio
# und Videodaten in andere Formate

if [ "$1" != "" ]; then
 if [ "$2" != "" ]; then
    for i in *."$1"
    do
      if [ -f "$i" ]; then
       ffmpeg -ab 192k -i "$i" "${i%."$1"}"."$2"
      fi
   done
 else
    echo "Usage: ./skript.sh [von] [nach]"
 fi
else
  echo "Usage: ./skript.sh [von] [nach]"
fi

Den Code könnt ihr euch in eine Textdatei kopieren und am Besten die Datei in skript.sh benennen.