Ich habe den folgenden Befehlssatz verwendet, um alle meine WordPress-Sites in meiner CentOs-Shared-Hosting-Partition auf der Plattform meines Hosting-Anbieters zu aktualisieren (über täglichen Cron).
Die wpBefehle innerhalb des pushd-popdSets sind von derWP-CLIProgramm, eine Bash-Erweiterung, die für verschiedene Aktionen auf Shell-Ebene auf WordPress-Websites verwendet wird.
for dir in public_html/*/; do
if pushd "$dir"; then
wp plugin update --all
wp core update
wp language core update
wp theme update --all
popd
fi
done
Das Verzeichnis public_htmlist das Verzeichnis, in dem sich alle Website-Verzeichnisse befinden (jede Website hat normalerweise eine Datenbank und ein Hauptdateiverzeichnis).
Da es public_htmleinige Verzeichnisse gibtWelche nicht sindWenn es sich um WordPress-Websiteverzeichnisse handelt, gibt WP-CLI diesbezüglich Fehler zurück.
Um diese Fehler zu vermeiden, könnte ich vermutlich Folgendes tun:
for dir in public_html/*/; do
if pushd "$dir"; then
wp plugin update --all 2>myErrors.txt
wp core update 2>myErrors.txt
wp language core update 2>myErrors.txt
wp theme update --all 2>myErrors.txt
popd
fi
done
Gibt es statt des viermaligen (oder häufigeren) Schreibens 2>myErrors.txteine Möglichkeit, sicherzustellen, dass alle Fehler aller Befehle in derselben Datei in einer Zeile aufgeführt werden?
Antwort1
Der > fileOperator öffnet die Datei filezum Schreiben, kürzt sie aber zunächst. Das heißt, jedes neue > filebewirkt, dass der Inhalt der Datei ersetzt wird.
Wenn Sie möchten, myErrors.txtdass die Datei die Fehler aller Befehle enthält, müssen Sie die Datei entweder nur einmal öffnen oder >das erste Mal und >>die anderen Male verwenden (wodurch die Datei inAnhängenModus).
Wenn es Ihnen nichts ausmacht, dass die pushd/ popd-Fehler auch in die Protokolldatei gelangen, können Sie hier die gesamte forSchleife umleiten:
for dir in public_html/*/; do
if pushd "$dir"; then
wp plugin update --all
wp core update
wp language core update
wp theme update --all
popd
fi
done 2>myErrors.txt
Oder Sie könnten die Protokolldatei auf einem FD über beispielsweise 2, 3 öffnen und für jeden Befehl oder jede Befehlsgruppe, die Sie zur Protokolldatei umleiten möchten, Folgendes verwenden 2>&3(oder um Befehle nicht mit FDs zu verunreinigen, die sie nicht benötigen):2>&3 3>&-
for dir in public_html/*/; do
if pushd "$dir"; then
{
wp plugin update --all
wp core update
wp language core update
wp theme update --all
} 2>&3 3>&-
popd
fi
done 3>myErrors.txt
Antwort2
Sie können geschweifte Klammern verwenden, umGruppeein Block und leitet die gesamte Ausgabe um:
for dir in public_html/*/; do
if pushd "$dir"; then
{
wp plugin update --all
wp core update
wp language core update
wp theme update --all
} 2>myErrors.txt
popd
fi
done


