На одном из основных серверов уже ~40 сайтов на движке WordPress, и число их постоянно увеличивается. Очевидно, что обновлять их по одному каждый раз — долго и муторно, начал искать более удобные и быстрые способы.
В начале узнал про замечательную консольную утилиту WP-CLI. Написал простой скрипт на bash, который заходил в каждую отдельную папку и выполнял простую команду:
wp plugin update --all && wp core update
В целом, этот скрипт был одним большим куском быдлокода, которым было стыдно делиться. Каждая новая папка с сайтом прописывалась отдельно, что было совсем неудобно, так как я часто забывал это сделать, установив новый сайт, и WordPress долгое время не обновлялся.
Bash-скрипт для обновления всех сайтов на WordPress
Скрипт переписал, теперь это всего 5 строчек кода (где 3 из них, по сути, даже бесполезны 🙂 ). Собственно сам скрипт:
#!/bin/bash
echo "Время обновлений!"
echo "Обновим движок и все плагины."
for d in ~/web/*/ ; do (echo "Начинаю обновление $d:" && cd "$d/public_html/" && wp plugin update --all && wp core update && wp language core update && echo "Закончил с $d:"); done
echo "Скрипт завершил свою работу. Всем спасибо."
В таком виде он работает у меня. Думаю видно, что основная часть скрипта — это строка:
for d in ~/web/*/ ; do (echo "Начинаю обновление $d:" && cd "$d/public_html/" && wp plugin update --all && wp core update && wp language core update && echo "Закончил с $d:"); done
В начале берётся список всех папок из ~/web/, затем скрипт переходит в каждую папку и уже выполняет команды для обновления. Если вдруг в ~/web/ встретится сайт не на WordPress — просто будет предупреждение и скрипт перейдёт к следующей папке.
Если установлена панель Vesta, то для работоспособности скрипта ничего делать не нужно. Просто сохраните его, например update-wp.sh и запускайте командой:
./update-wp.sh
Если установлена другая панель управления, либо вообще ей не пользуетесь, измените ~/web/ на путь до вашей директории с сайтами. И если у вас файлы сайта содержатся в директории, отличной от public_html, то в скрипте выше вам ещё нужно поправить этот кусок:
cd "$d/public_html/"
Измените public_html под себя. Иначе не заработает.
Ну и как это выглядит:
Остались вопросы по настройке? Пишите в комментарии.
История изменений
- 10.05.2017, версия 1.0 — Запили этот пост, поэтому и буду считать 10 мая как дата первой версии скрипта
- 25.12.2017, версия 1.1 — Добавил сверхважную фичу — теперь обновляются ещё и языковые пакеты.