Kategorien
ANT Deployment Linux Server Shell

alte dateien mit ant task löschen

um mit ant alte dateien per find/pipe/xargs zu entfernen, kann man den ant exec befehl verwenden.

    <target name="dump_cleanup" description="dump cleanup - remove old backup db dumps">
        <echo message="cleanup backup dir - remove old db dumps"/>
        <exec executable="bash" dir="${backups}">
            <arg value="-c"/>
            <arg line='"find -P . -maxdepth 1 -type f -ctime +4 -print0 | xargs -0 rm -f"'/>
        </exec>
    </target>
Kategorien
Deployment Linux Server Shell

mit find und xargs alte dateien löschen

Der Konsolen Befehl im Detail:

find . -type f -ctime +3 -maxdepth 1 | xargs rm

find . findet im aktuellen Ordner Dateien (-type f – files) deren Dateistatus vor mehr als 3*24h (-ctime +3) geändert wurde. Mit -maxdepth 1 verhindern wir Rekursion in die Tiefe des aktuellen Ordners.

Die Pipe (|) übergibt das find-Ergebnis nach xargs und führt rm auf jedem einzelnen Ergebnis aus.

Kategorien
Deployment Linux Server Shell SVN Versionierung

svn patches erstellen und ausführen

Um einen Patch für eine geänderte Datei zu erstellen, nutzt man svn diff wie folgt:

svn diff file_with_changes.ext > diff.patch

Um diesen Patch dann zu benutzen, nutzt man svn wie folgt:

patch -p0 -i diff.patch

-p0 sorgt dafür das die zu patchende Datei gefunden wird (zero directories)
-i sagt patch welche patch Datei benutzt werden soll

Kategorien
Deployment Linux Server Shell

mit shell script und diff dateien prüfen

Um durch etwaige Cronjobs eine Prüfung von 2 Dateien und darauf folgende Aktionen zu erzeugen, kann ein shell script Verwendung finden.

#!/bin/bash

SOURCE=/mount/data/new_file.txt
TARGET=/srv/www/vhosts/www/app/config/old_file.txt

diff -i -b -B -q ${SOURCE} ${TARGET}

if [ ! $? -eq 0 ]
then
    echo "new file is different from old one - copy new one to old"
    cp ${SOURCE} ${TARGET}
else
    echo "no difference between files - nothing to do"
fi
Kategorien
Deployment GIT Linux Server Shell SVN Versionierung

GIT für SVN Umsteiger

Unter folgendem Link findet Ihr die GIT Quickreferenz für SVN Umsteiger.

http://git-scm.com/course/svn.html

Kategorien
Deployment Linux Server Shell SVN Versionierung

SVN WorkingCopy Version Format ändern

In verteilten Systemen kommt es des öfteren vor, das unterschiedliche SVN Versionen zum Einsatz kommen.

Wenn euer SVN diese Meldung ausgibt:

svn: This client is too old to work with working copy 'xyz'.  You need to get a newer Subversion client, or to downgrade this working copy. See http://subversion.tigris.org/faq.html#working-copy-format-change for details.

kann das Python Script change-svn-wc-format eine SVN WorkingCopy in ein bestimmtes anderes SVN Versionsformat wechseln.

Kategorien
Deployment Linux Server Shell

Ordner mit gzip packen und entpacken.

Da GZIP selbst keine ganzen Ordner packen kann, kann man TAR das gepackte Archiv erzeugen lassen.

user@server: tar cvzf ordner.tar.gz ordnername
user@server: tar zxvf ordner.tar.gz
Kategorien
Deployment Linux Server Shell

Shell Scripting Guide

Hier findet Ihr den Shell Scripting Guide:

freeos.com/guides/lsst/

Dann kann man beispielsweise so kleine Helferlein zum Löschen von Logs und Caches wie diesen hier basteln:

#!/bin/bash
cd `dirname $0` # go to scripts dir
cd .. # step ahead
arr[0]='Application1/app/cache/*'
arr[1]='Application1/var/cache/*'
arr[2]='Application2/application/cache/*'
arr[3]='Application2/application/logs/*'
arr[4]='Application2/pub/tmp/*'
arr[5]='Application3/application/cache/*'
arr[6]='Application3/application/logs/*'
arr[7]='Application3/pub/tmp/*'

i=0
while [ $i -lt ${#arr[@]} ]
do

rm -rf ${arr[$i]}
echo "${arr[$i]} deleted"

(( i=$i+1 ))
done
Kategorien
Deployment Linux Server Shell SVN Versionierung

.svn Verzeichnisse rekursiv aus Ordnern löschen

Folgender Kommandozeilen Befehl löscht alle .svn Verzeichnisse in einem Ordner.

Im Detail sucht das Kommando find
im aktuellen Ordner (.) rekursiv
nach Verzeichnissen (-type d)
mit dem Namen .svn (-name .svn)
und piped (|) diese Liste
nach xargs,
welches dann an erster Stelle (-0) der Liste
mit der Löschoperation (rm -rf) beginnt.


find . -type d -name .svn -print0 | xargs -0 rm -rf

Kategorien
ANT Deployment Linux Shell XML

Deployment mit ANT

ANT ist ein wunderbares Kommandozeilen-Tool mit dem man Deployment gerade auch von Webapplikationen automatisieren kann.

Ich benutze es um Entwicklungsstände in die Stage oder Liveumgebung auszuspielen.

Zur Konfiguration des Deploymentprozesses erzeugt man eine build.xml Datei, die alle nötigen Anweisungen enthält.

Folgende XML Datei erzeugt einen Backup-Ordner und kopiert die aktuelle Live-Applikation dort hinein.

Desweiteren erzeugt das Skript einen Datenbank Dump und kopiert diesen ebenfalls dorthin.

Danach wird der aktuelle Entwicklungsstand in den Live-Ordner kopiert.

Zu guter Letzt werden noch die Log- und Cache-Ordner geleert.


<project name="builder" default="build" basedir=".">
    <description>
        devel to live update including dbdump and clear cache
    </description>

    <!-- set global properties for this build -->
    <property name="devel" location="devel"/>
    <property name="live" location="live"/>
    <property name="backup" location="backup"/>

    <property name="db_host" value="localhost"/>
    <property name="db" value="databasename"/>
    <property name="db_user" value="databaseuser"/>
    <property name="db_pass" value="databasepassword"/>

    <target name="build">
        <!-- create the timestamp -->
        <tstamp/>

        <!-- create the backup dir -->
        <mkdir dir="${backup}_${DSTAMP}"/>

        <!-- dumb db to backup dir -->
        <echo message="create mysqldump"/>
        <exec executable="mysqldump" output="${backup}_${DSTAMP}/dump_${db}.sql">
            <arg value="${db}"/>
            <arg value="-u${db_user}"/>
            <arg value="-p${db_pass}"/>
        </exec>

        <!-- copy current live dir to backup dir -->
        <copy todir="${backup}_${DSTAMP}">
            <fileset dir="${live}"/>
        </copy>

        <!-- copy current devel dir to live dir -->
        <copy todir="${live}">
            <fileset dir="${devel}" excludes="**/*index.php"/><!-- beware overiding main config index.php -->
        </copy>

        <!-- delete cache/log files -->
        <echo message="cleanup cache/logs in backup/live"/>
        <delete includeemptydirs="true">
            <fileset dir="${backup}_${DSTAMP}/application/cache" includes="**/*"/>
            <fileset dir="${backup}_${DSTAMP}/application/logs" includes="**/*"/>
             <fileset dir="${live}/application/cache" includes="**/*"/>
            <fileset dir="${live}/application/logs" includes="**/*"/>
        </delete>
    </target>
</project>

Dieses Skript wird auf der Kommandozeile von Linux ausgeführt.

ANT sucht per default nach einer build.xml im ausführenden Ordner.


user@server:~/pages$ ant

Buildfile: build.xml

build:
    [mkdir] Created dir: /home/user/pages/backup_20091027
     [echo] create mysqldump
     [copy] Copying 1153 files to /home/user/pages/backup_20091027
     [copy] Copied 261 empty directories to 5 empty directories under /home/user/pages/backup_20091027
     [copy] Copying 50 files to /home/user/pages/live
     [echo] cleanup cache/logs in backup/live

BUILD SUCCESSFUL
Total time: 27 seconds