Plesk на хостинге: шпаргалка администратора
Годы на поддержке хостинга — это сотни серверов с Plesk и одни и те же проблемы: кончилось место, забилась почтовая очередь, завис бэкап, сайт отдаёт 503. Собрал команды из своих заметок в одну шпаргалку.
На первой и второй линии поддержки хостинга Plesk — это ежедневная работа. В моём Obsidian раздел по Plesk вырос до полусотни заметок: от «почему не уходит почта» до подключения LUN больше 2 ТБ. Здесь — выжимка команд, которые реально пригождались чаще всего. Все примеры обезличены: example.com, user@example.com, ID — подставьте свои.
Всё ниже выполняется от root по SSH. Перед массовыми операциями — удалением писем, файлов, бэкапов — сначала посмотрите, что попадёт под команду, и только потом удаляйте.
Диагностика и repair
Первое, что стоит запустить при «что-то сломалось, непонятно что»:
plesk version # версия и ОС
plesk repair all -n # проверка без изменений — что найдёт
plesk repair all -y # проверить и исправить всё
plesk repair web example.com -y # только веб-конфигурация одного домена
plesk repair mail -y # только почта
plesk repair db -y # целостность БД самого Plesk
plesk repair — универсальное лекарство от рассинхронизации: когда конфиги на диске не совпадают с тем, что Plesk хранит у себя. Режим -n полезен, чтобы сначала увидеть масштаб.
Пересобрать конфиги веб-сервера для всех доменов:
plesk sbin httpdmng --reconfigure-all
Статус служб:
plesk sbin pleskrc nginx status
systemctl status sw-engine sw-cp-server psa
Базы данных
Подключиться к MySQL под администратором Plesk без ввода пароля:
plesk db
plesk db -e "SHOW DATABASES;"
Дамп всех пользовательских баз по отдельным файлам:
mkdir -p /root/db-dump
for db in $(plesk db -Ne "SHOW DATABASES;" | grep -vE '^(information_schema|performance_schema|mysql|sys|psa|apsc|horde|roundcubemail|phpmyadmin_.*)$'); do
plesk db dump "$db" > "/root/db-dump/${db}.sql"
done
Самые большие базы и таблицы — частая причина нехватки места:
plesk db -e "SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024) AS mb
FROM information_schema.tables GROUP BY table_schema ORDER BY mb DESC LIMIT 10;"
Если MySQL не стартует, первым делом смотрите лог и свободное место: переполненный диск — самая частая причина, следом идут повреждённые таблицы InnoDB.
Бэкапы и миграции
Резервные копии Plesk пишет журналы в /var/log/plesk/PMM/. Со временем там накапливаются гигабайты:
du -sh /var/log/plesk/PMM/
# посмотреть, что старше 30 дней
find /var/log/plesk/PMM/ -maxdepth 1 -name 'backup*' -type d -ctime +30
# и только потом удалить
find /var/log/plesk/PMM/ -maxdepth 1 -name 'backup*' -type d -ctime +30 -exec rm -rf {} +
Локальные бэкапы лежат в /var/lib/psa/dumps/ — проверьте, не хранятся ли там копии, которые давно ушли во внешнее хранилище.
Для переноса сайтов между серверами — Plesk Migrator: он сам переносит домены, почту и базы. Для переноса почтовых ящиков с других серверов я написал отдельный инструмент — imapsync-manager.
Почта: очередь и спам
Классический тикет: «почта не уходит» или «сервер в чёрных списках». Почти всегда причина — взломанный ящик или скрипт сайта, который рассылает спам.
Postfix
postqueue -p | tail -1 # размер очереди
postqueue -p | grep -c '^[A-F0-9]' # число писем
# топ отправителей в очереди
postqueue -p | grep -Eo '^[A-F0-9]+.*' | awk '{print $NF}' | sort | uniq -c | sort -nr | head
postcat -q ID # содержимое конкретного письма
postsuper -d ID # удалить одно письмо
postqueue -f # попытаться отправить всё сейчас
Удалить из очереди всё от одного отправителя:
postqueue -p | awk '/^[A-F0-9]/ && $NF=="spammer@example.com" {print $1}' | tr -d '*!' | postsuper -d -
postsuper -d ALL очищает очередь целиком — вместе с легитимными письмами. Использовать только когда понятно, что в очереди один спам.
Exim
exim -bpc # размер очереди
exim -bp | exiqsumm | sort -nr | head # сводка по доменам
exiqgrep -f spammer@example.com -i | xargs exim -Mrm # удалить письма отправителя
exiqgrep -zi | xargs exim -Mrm # удалить «замороженные»
Найти источник
- ящик взломан — смените пароль и проверьте логи авторизации: много успешных входов с разных стран за короткое время;
- спамит скрипт сайта — в заголовках письма будет путь к PHP-файлу (
X-PHP-Script/X-PHP-Originating-Script), дальше — поиск веб-шелла. Как разбираться со взломанным сайтом, я описывал в памятке по инцидентам; - после чистки проверьте IP сервера в DNSBL и подайте заявки на исключение.
Место на диске
Сначала — где именно закончилось:
df -h
df -i # иноды тоже могут кончиться
du -xh --max-depth=1 / | sort -h | tail
Логи сайтов — частый виновник:
du -h /var/www/vhosts/system/*/logs/* | sort -h | tail -20
truncate -s 0 /var/www/vhosts/system/example.com/logs/access_log
truncate обнуляет файл, не удаляя его, — процесс, который пишет в лог, продолжит работать. Если удалить лог через rm, а веб-сервер держит его открытым, место не освободится, пока процесс не перезапустить. Найти такие файлы:
lsof +L1 | grep deleted
Чтобы проблема не вернулась — настройте ротацию логов в параметрах домена в Plesk.
Зависшие задачи
Если в панели «висит» задача — бэкап, установка обновлений, применение настроек:
ps aux | grep -E 'task-async|pmmcli|backup' | grep -v grep
pkill -f task-async-executor
systemctl restart sw-engine sw-cp-server
Заблокированный процесс установки обновлений:
ps aux | grep -E 'autoinstaller|yum|dnf|apt' | grep -v grep
Не убивайте установщик посреди работы без необходимости — сначала дайте ему время и посмотрите лог /var/log/plesk/install/.
PHP и сайты
plesk bin php_handler --list # какие версии PHP установлены
plesk bin domain --info example.com # параметры домена, в т.ч. PHP
plesk bin site --update-php-settings example.com -settings settings.ini
Типичные проблемы:
- 503 / 502 — смотрите лог PHP-FPM и лимиты пула (
pm.max_children); часто сайт просто упирается в число процессов; - белый экран — включите показ ошибок временно или смотрите
error_logв/var/www/vhosts/system/example.com/logs/; - нужна своя версия PHP — Plesk позволяет зарегистрировать собственный обработчик через
php_handler --add; - производительность Apache — для сайтов на Apache помогает mod_lsapi вместо обычного CGI/FPM.
Безопасность
Если на сервере стоит CSF:
csf -g 203.0.113.10 # найти IP во всех правилах
csf -d 203.0.113.10 # заблокировать
csf -dr 203.0.113.10 # снять блокировку
csf -a 198.51.100.5 # добавить в белый список
csf -r # перезагрузить правила
Fail2Ban, встроенный в Plesk:
fail2ban-client status
fail2ban-client status plesk-panel
fail2ban-client set plesk-panel unbanip 203.0.113.10
Минимум, который я включал на каждом сервере: Fail2Ban для панели, SSH и почты; ModSecurity с актуальными правилами; доступ к панели только по HTTPS; актуальные версии PHP у клиентов. Подробнее о защите хостинга от ботов — в отдельной статье.
Чек-лист при «сервер тормозит»
uptime,top— нагрузка и кто её создаёт.df -h,df -i— место и иноды.- Почтовая очередь — не идёт ли спам-рассылка.
ss -sи топ IP в логах — нет ли атаки или агрессивного бота.- Лимиты PHP-FPM у самых тяжёлых сайтов.
- Медленные запросы MySQL.
Большинство тикетов закрывается на одном из этих шести шагов.