Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 21

Thema: Script um bestimmte Ausdrücke in Dateien zu ändern

  1. #1
    Registrierter Benutzer
    Registriert seit
    Sep 2007
    Beiträge
    41

    Script um bestimmte Ausdrücke in Dateien zu ändern

    Hallo zusammen,

    ich habe eine kleine Frage und hoffe der ein oder andere kann mir weiterhelfen ...

    ich habe einen Server der via NFS-Mount 2 Verzeichnisse von anderen Servern gemountet hat

    /srv/www/htdocs - geht auf Server1
    /srv/www/htdocs2 - geht auf Server2

    soweit alles ok.
    Diese beiden Pfadangaben sind natürlich auch in sämtlichen Apache Konfigurationsdateien eingetragen.
    Wenn jetzt z.B. Server1 mal neu gestartet werden soll, wurde bisher immer per Hand das Docroot auf htdocs2 geändert und der Apache anschließend neu geladen;
    mittlerweile sind die vhost-Dateien aber so groß geworden, dass man doch mal den ein oder anderen Eintrag übersieht.

    Nun mein Anliegen:
    ich bräuchte ein Script, welches automatisch in allen Dateien in einem Verzeichnis den Begriff "/srv/www/htdocs" in "/srv/www/htdocs2" ändert, und anschließend den Apache neu lädt ...
    meine ersten Versuche habe ich mit "sed" gemacht, aber so richtig funktioniert das alles nicht ...

    Hat vielleicht der ein oder andere nen Tip für mich?
    Danke im voraus.
    VG

  2. #2
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    Zitat Zitat von crackerjack Beitrag anzeigen
    meine ersten Versuche habe ich mit "sed" gemacht, aber so richtig funktioniert das alles nicht ...
    sed ist das "passende" Mittel.

    "Es funktioniert nicht" war aber sicherlich nicht die Fehlermeldung oder das Ergebnis, das Du bekommen hast.

    ... und nur "sed" war sicherlich nicht das, was Du exakt versucht hast...


    Alternativ nicht direkt das htdocs per NFS einbinden sondern dies via einem Symlink auf den NFS-Server setzen - dann kannst Du problemlos durch ändern des Symlinks den NFS-Server wechseln ohne an der Apache-Konfig herumbasteln zu müssen.
    Ich bin root - ich darf das.

  3. #3
    Universaldilletant Avatar von fork
    Registriert seit
    Dec 2001
    Ort
    Frankfurt/Main
    Beiträge
    1.175
    Code:
    find /etc/apache2/sites-enabled -type f -exec sed -r -i -e 's#/var/www/htdocs#/var/www/htdocs2#' '{}' +
    Wenn Du das zweimal machst, ist Deine VHost-Konfig kaputt.

    Habe ein Backup bevor Du das ausführst!

  4. #4
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    Zusätzliche Alternative: NFS-Server via HeartBeat und Floating-IP HA aufsetzen.
    Ich bin root - ich darf das.

  5. #5
    Registrierter Benutzer
    Registriert seit
    Sep 2007
    Beiträge
    41
    Zitat Zitat von fork Beitrag anzeigen
    Code:
    find /etc/apache2/sites-enabled -type f -exec sed -r -i -e 's#/var/www/htdocs#/var/www/htdocs2#' '{}' +
    Wenn Du das zweimal machst, ist Deine VHost-Konfig kaputt.

    Habe ein Backup bevor Du das ausführst!
    ... genau ...
    meine Tests waren mit diesen Aufrufen:
    sed -i 's/htdocs/htdocs/g' *.conf

    wenn ich das allerdings zweimal ausführe habe ich auf einmal ein "htdocs22" ... auch nicht Sinn der Sache bzw. Apache-Konfig kaputt ;-)

    und es müßte ja auch später wieder zurückgeändert werden wenn der Server1 nach dem Neustart wieder da ist ...
    das machts nicht einfacher

  6. #6
    Fieses Frettchen Avatar von DrunkenFreak
    Registriert seit
    Dec 2003
    Beiträge
    3.315
    Ich würde einfach einen Link von /srv/www/htdocs2 auf htdocs setzen. Dann brauchst du nicht in irgendwelchen Dateien rumfriemeln. Die elegante und leider auch aufwändigere Lösung steht allerdings in #4.

  7. #7
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.810
    So ziemlich genau dafür wurde einst mod_macro geschrieben.
    Geändert von nopes (26.02.18 um 11:43 Uhr) Grund: typo
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  8. #8
    Universaldilletant Avatar von fork
    Registriert seit
    Dec 2001
    Ort
    Frankfurt/Main
    Beiträge
    1.175
    Ja. Das mit dem sed ist hier nicht gut.

    Das mit dem Symlink ist besser. Ein kleiner Automatismus geht z. B. so: (per cron jede Minute ausführen)

    Code:
    #!/bin/bash
    
    # symlink von /srv/www/htdocs nach /srv/www/htdocs_server1 oder /srv/www/htdocs_server2
    
    NORMALER_SERVER=server1
    BACKUP_SERVER=server2
    
    AKTUELLER_SERVER=$(readlink /srv/www/htdocs)
    AKTUELLER_SERVER="${AKTUELLER_SERVER: -7}"  # Leerzeichen zwischen : und - !!!
    
    # Nicht erreichbare NFS-Shares blockieren gerne, deswegen mit timeout
    #
    # prüfen ob der Server1-mount nicht erreichbar ist und ob Server2-mount erreichbar ist ...
    if !timeout 10 [ -f /var/www/htdocs_$NORMALER_SERVER/index.php ] && 
       timeout 10 [ -f /var/www/htdocs_$BACKUP_SERVER/index.php; then
       # wenn ja, link löschen und neu setzen.
       rm -f /var/www/htdocs
       ln -sf /var/www/htdocs_$BACKUP_SERVER /var/www/htdocs
    fi
    Da fehlt jetzt noch ein bisschen was. Z. B. das er den Link nur setzt, wenn er nicht schon gesetzt ist und dass der Link wieder zurück gesetzt wird, wenn der Hauptserver wieder da ist. Das überlasse ich mal Dir.

  9. #9
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    ... oder man denkt komplett um und überlegt, ob "ext. Filesystem via NFS" nicht durch "Proxy-Request auf anderen Server" ersetzt wird.
    Ich bin root - ich darf das.

  10. #10
    Registrierter Benutzer
    Registriert seit
    Sep 2007
    Beiträge
    41
    Zitat Zitat von fork Beitrag anzeigen
    Ja. Das mit dem sed ist hier nicht gut.

    Das mit dem Symlink ist besser. Ein kleiner Automatismus geht z. B. so: (per cron jede Minute ausführen)

    Code:
    #!/bin/bash
    
    # symlink von /srv/www/htdocs nach /srv/www/htdocs_server1 oder /srv/www/htdocs_server2
    
    NORMALER_SERVER=server1
    BACKUP_SERVER=server2
    
    AKTUELLER_SERVER=$(readlink /srv/www/htdocs)
    AKTUELLER_SERVER="${AKTUELLER_SERVER: -7}"  # Leerzeichen zwischen : und - !!!
    
    # Nicht erreichbare NFS-Shares blockieren gerne, deswegen mit timeout
    #
    # prüfen ob der Server1-mount nicht erreichbar ist und ob Server2-mount erreichbar ist ...
    if !timeout 10 [ -f /var/www/htdocs_$NORMALER_SERVER/index.php ] && 
       timeout 10 [ -f /var/www/htdocs_$BACKUP_SERVER/index.php; then
       # wenn ja, link löschen und neu setzen.
       rm -f /var/www/htdocs
       ln -sf /var/www/htdocs_$BACKUP_SERVER /var/www/htdocs
    fi
    Da fehlt jetzt noch ein bisschen was. Z. B. das er den Link nur setzt, wenn er nicht schon gesetzt ist und dass der Link wieder zurück gesetzt wird, wenn der Hauptserver wieder da ist. Das überlasse ich mal Dir.

    .. also bei mir scheitert es momentan noch (schon) beim erstellen des Symlinks ... gibt es da etwas spezielles zu beachten?
    seh momentan den Wald vor lauter Bäumen nicht ...

  11. #11
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    ... und auch hier wieder die Frage: Was hast Du genau gemacht und was war die Fehlermeldung?

    Immer dran denken: Vor Deinem PC sitzt nur Du - wir müssen mit dem leben, was Du lieferst.
    Ich bin root - ich darf das.

  12. #12
    Registrierter Benutzer
    Registriert seit
    Sep 2007
    Beiträge
    41
    Zitat Zitat von marce Beitrag anzeigen
    ... und auch hier wieder die Frage: Was hast Du genau gemacht und was war die Fehlermeldung?

    Immer dran denken: Vor Deinem PC sitzt nur Du - wir müssen mit dem leben, was Du lieferst.
    also ich habe nen "ln -s \server1:\export /srv/www/htdocs3" ( htdocs3 zum testen ) in mehreren Variationen ( \\server1:\export, //server1:\Export, usw ) ausgeführt, mit dem Ergebnis das er da keine Dateien findet;

  13. #13
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    na, das kann ja nicht funktionieren.

    mounte Server1 nach /mnt/nfs_server1
    mounte Server2 nach /mnt/nfs_server2

    ... und dann ln -s /mnt/nfs_server1 /srv/www/htdocs1

    ... sollte in /srv/www/ der Symlink auch mehrfach auftreten macht es ggf. Sinn noch einen Zwischenpunkt einzuführen - also /srv/www/[abcd] -> /mnt/nfs_link -> /mnt/nfs_server1 - dann musst Du nur den mittleren Link umhängen und alles wird gut.
    Ich bin root - ich darf das.

  14. #14
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    Zitat Zitat von nopes Beitrag anzeigen
    So ziemlich genau dafür wurde einst mod_macro geschrieben.
    Oder "trivial" https://httpd.apache.org/docs/2.4/env.html - hab's noch nie ausprobiert, aber damit kann man wohl auch einfache Unix-System-Umgebungsvariablen verwenden - und sich z.B. einen APACHEDOCROOTBASEPATH=/mnt/nfs_server_1/ defnieren und verwenden.
    (da sollte man aber den anderen Usern auf dem System mehr als gut vertrauen - oder halt sich seine Start-/Stop-Scripte sauber anschauen und anpassen)

    Bedingt für Änderungen halt immer noch einen Apache-Restart während der "Link-Umhänge-Trick" da ohne solchen auskommt.
    Geändert von marce (26.02.18 um 14:52 Uhr)
    Ich bin root - ich darf das.

  15. #15
    Registrierter Benutzer
    Registriert seit
    Sep 2007
    Beiträge
    41
    also das mounten und Symlink erstellen hat jetzt soweit geklappt, allerdings bekomme ich nen "Access denied" wenn ich den Content aufrufe ...

    muss man beim Apache noch irgendetwas beachten wenn das Docroot auf einen symb. Link zeigt der via NFS gemountet ist ??

Ähnliche Themen

  1. Kopieren bestimmte Dateien mit Verzeichnisstruktur
    Von nieselfriem im Forum Linux Allgemein
    Antworten: 6
    Letzter Beitrag: 20.10.15, 21:21
  2. Dateien, reguläre Ausdrücke, Inhalte
    Von r0n im Forum Linux Allgemein
    Antworten: 15
    Letzter Beitrag: 06.07.05, 14:55
  3. batch,script...um einträge in dateien zu ändern
    Von krk|m@sta im Forum System installieren und konfigurieren
    Antworten: 2
    Letzter Beitrag: 24.06.04, 13:10
  4. Wie bestimmte Anzahl an Dateien löschen?
    Von elevator im Forum Linux Allgemein
    Antworten: 5
    Letzter Beitrag: 19.03.03, 22:03
  5. Wget und bestimmte Dateien
    Von Firew im Forum Anwendungen Allgemein, Software
    Antworten: 6
    Letzter Beitrag: 21.11.02, 13:37

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •