Get Social

Как побороть баг “rsync: Failed to exec ssh -p No such file or directory”

После установки редактора VS Code в качестве среды разработки на PHP я также нашёл Sync-Rsync пакет в маркетплейсе. Однако, опция “sync-rsync.shell”: “ssh -p 1234” не работала…

Visual Studio Code и Sync-Rsync: “Failed to exec ssh -p No such file or directory”

Вывод консоли:
rsync: Failed to exec ssh -p 1234: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(85) [sender=3.1.1]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(226) [sender=3.1.1]

Я перепробовал множество настроек, но ничего не помогало…
Однако, решение всё же удалось найти.
Если говорить коротко, то нужно сделать следующее:

Проверьте версию rsync:
user@example:~$ rsync --version
rsync version 3.1.1 protocol version 31

Насколько мне известно, для rsync версий > 2.6 можно указать “-e ssh -p 1234” или можно запустить rsync без указания этого параметра, ssh будет работать в любом случае.

Отредактируйте ~/.ssh/config
nano ~/.ssh/config

и установите настройки своего ssh сервера, подобно тому, как указано ниже:
Host example.com
User user
Hostname example.com
Port 29171
... (любые другие настройки, как IdentityFile и т.д.)

Теперь просто используйте rsync (без -e ssh, host username, port number и так далее):
rsync -avz --progress --delete /home/user/some-local-path/ example.com:/home/serveruser/some-remote-path/

Bash скрипт в одну строку для проверки свободного места в Linux

Эта задача возникла после переноса сайтов клиента со старого VPS на новый. На новом виртуально сервере всё хорошо с процессором и озу, однако дискового пространства “впритык”. Получилось так, что Vesta CP, которая по-умолчанию создаёт 3 бэкапа, просто заполнила диск под ноль.

Клиент попросил, чтобы когда места становится мало – об этом сразу стало известно. Поэтому я решил сделать очень простой скрипт в одну строку, который отслеживает дисковое пространство и отправляет уведомление на электронную почту. Такой скрипт можно целиком прописать в планировщик Cron.

Собственно, вот он:

Скрипт мониторинга дискового пространства в Linux


if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 95 ]; then echo "Disk usage exceeded 95%" | mail -s "Warning! My Server" mail@example.com; fi

При достижении использования диска на 95% этот однострочный скрипт начнёт присылать сообщения с предупреждениями на почту “mail@example.com”. Например, можно добавить эту строчку в крон, чтобы проверка была каждые 45 минут. Конечно, можно хоть каждую минуту поставить, но тогда ваш ящик просто завалит этими сообщениями.

Можно также пойти дальше и сделать, чтобы у нас был ещё одно предупреждение при достижении 99%:

if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 99 ]; then echo "Disk usage exceeded 99%!" | mail -s "Panic!! My Server" mail@example.com; fi
Тут ситуация посерьёзнее, поэтому можно в кроне поставить, чтобы проверка была каждые 5 минут

В итоге получим в crontab:

# server usage alert
*/45 * * * * if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 95 ]; then echo "Disk usage exceeded 95%" | mail -s "Warning! My Server" mail@example.com; fi
*/5 * * * * if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 99 ]; then echo "Disk usage exceeded 99%!" | mail -s "Panic!! My Server" mail@example.com; fi

Конечно, можно пойти ещё дальше и сделать из этих скриптов 1 в отдельном файле и с красивым синтаксисом и отступами. Но описанный выше вариант просто работает и мне этого достаточно.

P.S. Убедитесь, что в выводе команды df у вас будет нужный диск (“/dev/sda1” или может быть что-то другое)

Почему Sphinx не работает на Ubuntu / Debian?

Eсли sphinx служба запускается, но поиск по сайту ничего не выдаёт (и ошибку в том числе), проблема может быть в следующем:
systemctl status sphinxsearch
Когда проверяете статус службы – обратите внимание на строку

...
... To enable sphinxsearch, edit /etc/default/sphinxsearch and set START=yes
...

В этом случае просто отредактируйте файл /etc/default/sphinxsearch и поменяйте значение параметра “START=no” на “START=yes”.
Всё!