ServerAdmin.ru
31.3K subscribers
664 photos
55 videos
22 files
2.86K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Регистрация в РКН: https://vk.cc/cG1Urj
Download Telegram
Раз уж я рассмотрел панели для управления бэкапами (Postgresus и Pgbackweb) в виде дампов в Postgresql, было бы логично рассмотреть и вариант со своими велосипедами на bash. Поделюсь тем, что использую я.

Сначала полный текст скрипта для бэкапа:

#!/bin/bash

BASES=`/opt/pgpro/1c-16/bin/psql -U postgres -l | grep "_buh\|_zup" | awk '{print $1}'`
DATA=`date +"%Y-%m-%d_%H-%M"`
LOGDIR=/var/lib/pgpro/service_logs
BACKUPDIR=/var/lib/pgpro/backup

for i in ${BASES};
do
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $i" >> $LOGDIR/backup.log
/opt/pgpro/1c-16/bin/pg_dump -U postgres $i > $BACKUPDIR/$DATA-$i.sql 2>> $LOGDIR/dump.log
BEGIN=`head -n 2 $BACKUPDIR/$DATA-$i.sql | grep ^'-- PostgreSQL database dump' | wc -l`
END=`tail -n 3 $BACKUPDIR/$DATA-$i.sql | grep ^'-- PostgreSQL database dump complete' | wc -l`
if [ "$BEGIN" == "1" ];then
if [ "$END" == "1" ];then
echo "Backup ${i} is OK" >> $LOGDIR/backup.log
/usr/bin/pigz -c $BACKUPDIR/$DATA-$i.sql > $BACKUPDIR/$DATA-$i.sql.gz
/usr/bin/rm $BACKUPDIR/$DATA-$i.sql
else
echo "Backup ${i} is corrupted" >> $LOGDIR/backup.log
fi
else
echo "Backup ${i} is corrupted" >> $LOGDIR/backup.log
fi
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $i" >> $LOGDIR/backup.log
echo "=========================================" >> $LOGDIR/backup.log
done


Рассказываю, что тут происходит:

1️⃣ Завожу в переменную BASES список баз, которые мы будем бэкапить. Их можно указывать вручную, примерно так: BASES=("db01_zup" "db02_buh"). Можно брать список всех баз. В данном случае на сервере я маркирую базы метками _buh и _zup в названиях баз, чтобы по ним делать выборку. Если базу не нужно бэкапить, то эта метка не ставится. Можно придумать любую свою метку, например _back. Это позволяет автоматически бэкапить все нужные базы, не следя за их составом. Очень актуально, если создаёте и удаляете базы не вы, но вам нужны все бэкапы баз.

Можно использовать обратный подход. Бэкапить все базы, но вручную или по маске задавать исключения. Примерно так:

/opt/pgpro/1c-15/bin/psql -U postgres -l | grep -wv 'template0\|template1\|test-base\|_test' | sed -e '1,3d' | head -n -2 | awk '{print $1}'`

2️⃣ База дампится с помощью pg_dump без каких-либо дополнительных параметров. На выходе имеем обычный несжатый текстовый дамп.

3️⃣ В дампе проверяем наличие строки -- PostgreSQL database dump в начале дампа и -- PostgreSQL database dump complete в конце. Поэтому нам важно иметь дамп в текстовом формате. Если процесс снятия дампа прошёл без ошибок и в дампе присутствуют эти строки, то с большой долей вероятности с ним всё в порядке. Я ни разу не сталкивался с обратной ситуацией.

Соответственно, если строки присутствуют, пишем в лог файл, что Backup is OK, если есть проблемы, то Backup is corrupted. Дальше этот файл забирает либо мониторинг, либо хранилка логов. И если они видят фразу corrupted, то срабатывает триггер.

4️⃣ Если с дампом всё в порядке, то он жмётся архиватором pigz. Он работает многопоточно всеми доступными ядрами процессора. Если не хотите нагружать так плотно сервер, то количество потоков можно ограничить ключами. Я обычно снимаю дампы ночью и жму на всю катушку, чтобы побыстрее завершилось. Дампы потом ещё передавать надо. Это уже отдельная процедура и запускается с сервера бэкапов. С самого сервера СУБД к бэкапам доступа нет.

Получается автоматическая максимально простая и эффективная схема работы. Я вчера добавлял базы в веб панель. Честно говоря, меня это утомило. Если баз 1-2, то не проблема. А 15 штук добавлять уже надоедает. Бывает и больше. Плюс, надо вручную следить за ними, добавлять, отключать ненужные и т.д. Так что панель вроде и выглядит удобно, но если баз много, то удобства уже сомнительные.

Дальше у меня работает ещё один простой скрипт, который забирает эти дампы на тестовый сервер, распаковывает и заливает в СУБД. Расскажу о нём в следующей заметке.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#postgresql #backup #script
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍150👎3
Утром рассказал, как делаю бэкапы баз Postgresql с помощью скриптов и pg_dump. Сейчас покажу, как я их проверяю. Для этого обычно держу небольшой тестовый сервер с той же версией Postgresql. В идеале это должна быть копия прода, но не всегда это возможно. На нём же зачастую проверяю обновления.

Первым делом надо забрать дампы с исходного сервера. Для этого беру простой скрипт, который забирает по SSH только свежие файлы за прошлый день. Если забрать сразу только нужные файлы, то потом не придётся делать в них выборку:

#!/bin/bash

/usr/bin/rsync -av --progress --files-from=<(ssh [email protected] '/usr/bin/find /var/lib/pgpro/backup -type f -mtime -1 -exec basename {} \; | egrep -v timestamp') [email protected]:/var/lib/pgpro/backup/ /data/backup/


Использую rsync, а список файлов для копирования формирую сразу в выражении ключа, подключившись к нужному хосту по SSH и отсортировав файлы по дате, взяв не старше суток. В данном случае файл timestamp через egrep -v добавлен в исключения. У меня там метка времени последнего бэкапа хранится для нужд мониторинга.

Ну а дальше дело техники. По очереди выполняю набор команд для удаления старой базы, создания новой, распаковки и заливки дампа. Перед первым запуском этого скрипта вручную создаю все восстанавливаемые базы и выборочно проверяю восстановление. Потом формирую итоговый список команд:

#!/bin/bash

BASES=`/opt/pgpro/1c-16/bin/psql -U postgres -l | grep "_buh\|_zup" | awk '{print $1}'`
BACKUP_DIR="/data/backup"

for i in ${BASES};
  do
   echo "`date +"%Y-%m-%d_%H-%M-%S"` Drop database ${i}"
   /opt/pgpro/1c-16/bin/dropdb -U postgres ${i}
   echo "`date +"%Y-%m-%d_%H-%M-%S"` Create database ${i}"
   /opt/pgpro/1c-16/bin/createdb -U postgres -T template0 ${i}
   echo "`date +"%Y-%m-%d_%H-%M-%S"` Start extract $i"
   /usr/bin/find /data/backup -type f -name *${i}* -exec /usr/bin/unpigz '{}' \;
   echo "`date +"%Y-%m-%d_%H-%M-%S"` End extract $i"
   echo "`date +"%Y-%m-%d_%H-%M-%S"` Start restore $i"
   /opt/pgpro/1c-16/bin/psql -U postgres ${i} < ${BACKUP_DIR}/`ls ${BACKUP_DIR} | grep ${i}` 1>/dev/null
   echo "`date +"%Y-%m-%d_%H-%M-%S"` End restore $i"
   echo "`date +"%Y-%m-%d_%H-%M-%S"` rm dump ${i}"
   /usr/bin/rm ${BACKUP_DIR}/`ls ${BACKUP_DIR} | grep ${i}`
done


Сразу говорю, что я тут ничего не оптимизировал, никаких проверок не делал. Если просто взять и запустить, то скорее всего у вас вывалятся какие-то ошибки или что-то пойдёт не так. Я просто показываю идею. У меня уже давно и структура каталогов одна и та же, и подход к именованию баз, бэкапов и т.д. Это всё сделано под меня и работает так уже много лет. Меня устраивает.

В данном скрипте нет никаких проверок успешной работы и оповещений, потому что это не последний этап проверок. Далее в зависимости от того, где эта база используется, запускаются свои проверки. Для баз 1С выполняется автоматическая выгрузка в dt с помощью отдельного скрипта. Если она проходит успешно, то считается, что дамп базы живой и нормально восстановился.

Если же это база от веб проекта, то параллельно из другого бэкапа восстанавливаются исходники в тестовый веб сервер, подключается восстановленная база и работает стандартная веб проверка в Zabbix Server, которая ищет какие-то данные на странице, которые без работающей базы не будут показаны. Если веб проверки проходят успешно, то считается, что база восстановилась, да и в целом бэкап живой.

Более сложные проверки в восстановленных базах я не делаю. Мой опыт в обслуживаемых инфраструктурах показывает, что этого достаточно. Ни разу не сталкивался, что всё прошло успешно, а с базой проблемы. Обычно проблемы возникают сразу в снятии дампа. Если он корректно выполнен, то дальше уже все отрабатывает нормально.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#backup #postgresql #script
👍96👎4
В последних публикациях на тему бэкапа баз в Postgresql не раз всплывал вопрос: "А есть ли веб панели для управления бэкапами баз MySQL?". Я сам никогда их не использовал и не встречал. Знаю, что инструменты для подобного бэкапа есть в панелях по управлению веб серверами, типа Hestiacp, aaPanel и им подобным. Очевидно, если у вас не веб сервер, то такую панель ставить не имеет смысла. А специализированных панелей только для бэкапов не существует.

Решение, как оказалось, есть на поверхности. Существует известная веб панель для управления сервером - Webmin. Странно, что я по ней ни одной заметки ещё не написал. Хоть сам и не ставлю на свои сервера, но приходилось работать. Там есть интересные возможности, ради которых её можно использовать.

В Webmin есть модуль для управления MySQL. Я его попробовал. Настроек немного, но сделано вполне функционально. Я там немного покумекал, как сделать наиболее удобно и получилось неплохо. Расскажу по шагам, как я всё настроил.

1️⃣ Установка. Панель собрана в пакеты под популярные дистрибутивы. Подключить репозиторий можно автоматически через скрипт:

# curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
# sh webmin-setup-repo.sh

Либо вручную, добавив репозиторий и ключ от него. Для Debian это:

deb https://download.webmin.com/download/newkey/repository stable contrib

# apt-get install webmin --install-recommends

После установки можно идти по IP адресу сервера на порт 10000 и заходить под учёткой root. После этого в разделе Webmin ⇨ Webmin Configuration ⇨ IP Access Control ограничьте доступ к панели по IP адресам. Её нельзя выставлять в публичный доступ. В панели периодически находят уязвимости, а у неё полный доступ к серверу.

2️⃣ Если MySQL сервер устанавливался после установки Webmin, то модуль управления будет в списке Un-used Modules, если после, то в Servers. Чтобы модуль переехал из Un-used, нажмите на Refresh Modules.

3️⃣ В модуле есть возможность настроить подключение к MySQL серверу в разделе Configuration ⇨ Server Connections. По умолчанию используется localhost, но вы можете подключиться к любому другому серверу, в том числе в контейнере. Главное, чтобы к нему был доступ извне.

4️⃣ Можно настроить бэкап как конкретной базы, так и всех разом. При бэкапе всех баз, каждая из них сохраняется в отдельный файл и может при желании сразу сжиматься. Бэкап выполняется через стандартный mysqldump. Ключи запуска могут добавлять при необходимости.

5️⃣ Для бэкапов есть планировщик. Работает в формате заданий cron. Да и сами задания добавляются в системный файл /var/spool/cron/crontabs/root.

6️⃣ Основное неудобство – задание бэкапа каждый раз перезаписывает файлы. Нет возможности хранить несколько копий и автоматически удалять старые. Я решил этот вопрос максимально просто в лоб.

Можно указать команды, которые будут выполняться до запуска бэкапа и после. Настроил бэкап в директорию /root/sql_backup а после бэкапа добавил команду:

mkdir /mnt/backup/`date +"%Y-%m-%d_%H-%M"` && cp -R /root/sql_backup/* /mnt/backup/`date +"%Y-%m-%d_%H-%M"`/

Она создаёт директорию вида 2025-07-23_16-27 и копирует туда созданные файлы. При следующем запуске имя директории будет другое.

Для того, чтобы очищать старые бэкапы, добавил команду перед запуском:

find /mnt/backup -type d -printf '%T@ "%p"\n' | sort -n | head -n -30 | awk '{print $2}' | xargs -I {} rm -r {}

Она оставляет 30 новых директорий, а более старые удаляет. Вопрос с ротацией бэкапов решён. Работает просто и наглядно. При желании можно добавить ещё одну команду, которая будет куда-нибудь во вне копировать эти файлы.

7️⃣ Для восстановления бэкапов достаточно создать новую базу или выбрать существующую, зайти в неё, выбрать раздел Execute SQL ⇨ Run SQL from file ⇨ From local file и выбрать один из дампов. При желании можно подключиться к другому серверу и восстановить бэкап туда.

Получилось простое в настройке и вполне функциональное решение.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#backup #mysql
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍69👎5
Для управления серверами на базе Linux существует множество различных веб панелей. Одна из самых старых и популярных, если не самая популярная – Webmin. Лет 15 я её точно знаю, сколько администрирую Linux. При этом панель развивается и регулярно обновляется.

В общем случае ничего подобного на свои сервера я не ставлю, так как умею и привык настраивать в консоли. Но в каких-то отдельных случаях устанавливал и пользовался. Плюс, много раз видел её в использовании у других администраторов. Она хоть и не даёт гибкости в настройках, но всю базу с её помощью можно настроить через веб интерфейс, не заходя в консоль вообще.

Устанавливается просто:

# curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
# sh webmin-setup-repo.sh
# apt-get install webmin --install-recommends

После установки можно заходить браузером на 10000-й порт сервера и логиниться под локальной учётной записью root. Настоятельно рекомендую сразу же ограничить доступ к панели в разделе Webmin ⇨ Webmin Configuration ⇨ IP Access Control. В ней периодически находят критические уязвимости, а у неё полный доступ к серверу с максимальными правами. Очень легко получить взлом сервера через неё. Откройте её только для себя, максимально ограничив доступ даже в локальной сети.

Не буду рассказывать про все возможности Webmin. Перечислю только те, что использовал я, либо видел у других.

🔹Удобный просмотр логов в разделе System ⇨ System Logs. Ради этого я не раз устанавливал Webmin туда, где нужно было часто в них ковыряться. Например, удобно было смотреть историю письма на почтовом сервере по его ID. Webmin поддерживает текстовые логи syslog и бинарные логи от systemd. Реализован удобный просмотр через веб интерфейс с возможностью там же грепнуть по какой-то строке.

🔹Ручной запуск самописных скриптов. Самому мне нет нужды в этом, у меня всегда консоль под рукой. Но если нужно кому-то передать возможность запускать скрипты через браузер, то Webmin – быстрое и удобное решение для этого. В разделе Tools ⇨ Custom Commands можно добавить любые консольные команды или скрипты. Поддерживаются в том числе и SQL команды с возможностью задать сервер и учётку для исполнения.

При этом веб интерфейс нормально работает через смартфон. Оттуда есть в том числе доступ к консоли сервера. Вы получаете удобный инструмент для выполнения каких-то действий с сервером в смартфоне. Можно заскриптовать разворачивание копии прода для разработчиков с бэкап сервера и отдать им в управление. Пусть сами это делают, когда им надо обновить стенд.

🔹Управление правилами iptables в Networking ⇨ Linux Firewall. Сам я никогда не пользовался, так как предпочитаю правила держать в одном общем скрипте, чтобы они все были перед глазами. Но видел как другие админы использовали этот модуль. Он удобно реализован и лично у меня не возникало проблем, если нужно было что-то посмотреть или подправить. Интерфейс передаёт особенности настройки iptables.

🔹Управлением запущенными сервисами, типа Samba, MySQL и т.д. Если вам не хочется или нет необходимости в тонкой настройке через файлы конфигурации, то через Webmin вы без проблем настроите базовую функциональность. Причём все конфигурации будут на стандартных местах. Webmin не отнимает возможность настраивать вручную в консоли. Если вы измените что-то через консоль, то это не сломает настройку через Webmin.

Я видел навороченные настройки Samba с множеством сетевых дисков и настроенными доступами для различных пользователей. Сделано удобно. Если надо дать какому-то пользователю доступ к общей шаре, то это можно быстро сделать через Webmin. Это позволяет передать управление данной настройкой эникею. Если пользователей много, я обычно к AD или другому LDAP подключал самбу и управлял доступом через них

Привёл несколько примеров, чтобы дать представление о том, что такое Webmin и как может использоваться. А так, там возможностей очень много.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#управление
1👍103👎5
Случайно вчера узнал, что сегодня праздник – День Сисадмина (*Кричали женщины: ура! И в воздух чепчики бросали*) (НЕТ). Никогда за ним специально не следил и не отмечал. А вчера пригласили на одно публичное мероприятие, посвящённое этому дню, но, к сожалению, не смог пойти, потому что переехал жить в деревню. И теперь все поездки удлинились.

Несмотря на трансформацию нашей профессии и появление ответвления в виде DevOps, куда передали множество практических компетенций сисадминов, сам я себя по прежнему считаю системным администратором, хотя навыками DevOps владею.

Если кто-то спрашивает меня или супругу, кем я работаю, отвечаю сам и советую жене говорить, что инженером. Люди при слове системный администратор представляют себе человека в офисе, который настраивает рабочие компьютеры, а вечером – домашние всем знакомым и родственникам. Я не делаю ни то, ни другое, поэтому чтобы никто не приставал с просьбами, отвечаю так. Если просят пояснить, что за инженер, то говорю, что инженер информационных систем и технологий. Получается, что и не сисадмин, и не программист. Никто починить домашний компьютер или посоветовать роутер не просит.

Раз сегодня наш профессиональный праздник, а здесь на канале в основном сисадмины, хотя и не только, сделаю несколько искренних пожеланий по этому поводу.

1️⃣ В нашей профессии очень много направлений и областей знаний. Желаю не сидеть на одном месте, если чувствуете, что вас здесь что-то не устраивает. В нашей профессии все дороги открыты, можно выбирать любое направление. Я сам учился на программиста, пошёл работать в поддержку Windows систем, потом стал виндовым администратором, затем изучил Linux и администрировал его. Уволился с постоянной работы и фрилансил с частичной занятостью. Потом открыл ИП и стал работать по договорам с веб разработкой и поддержкой веб сервисов. Сейчас вообще стал блогером. Считаю, что в этой деятельности я раскрылся больше, нежели как it-специалист. Всегда ищу и стремлюсь к тому, что нравится. Боюсь, но всё равно делаю.

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

2️⃣ Второе пожелание продолжает предыдущее. Чтобы понять, куда двигаться, желаю почаще прислушиваться к себе, чтобы понять, что реально твоё, а что нет. Это вообще сложно и не всем получается найти себя. Но если об этом хотя бы задумываться, то есть шанс разглядеть то, что реально твоё, а не наносное. Так что желаю всегда двигаться вперёд и смотреть внутрь себя, ища там направления.

3️⃣ Ну и самое главное – желаю делать бэкапы, регулярно их мониторить и проверять! Это вообще база для спокойной жизни системного администратора. Сколько через меня всевозможных историй прошло на эту тему. Из-за специфики моей деятельности, у меня стаж шёл год за три или пять. Несколько лет я постоянно работал с 4-5 компаниями, которые иногда менялись, соответственно, видел много различных инфраструктур. А потом удалённо ещё больше. Какое-то время работал с разовыми заказами. Там вообще шёл поток различных проблем и задач. Это не считая того, что мне постоянно пишут. Буквально вчера услышал очередную историю, где живым оказался бэкап двухгодичной давности 🤷🏻‍♂️

В общем, с праздником. Всем профессионального роста, развития компетенций, поменьше бухать по пятницам и праздникам и надёжного тыла за спиной. Ура 🎉🎉🎉
Да, и спасибо, что читаете столько лет. Тост на картинке ниже актуален, как никогда.

#разное
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍333👎3
Продолжаю утреннюю праздничную тему. На ютубе есть канал одной IT компании, которая почти каждый год выпускает юмористические ролики на тему сисадминов в праздник. Юмор специфический, но в основном неплохо задумано и снято. Что-то совсем старое, что-то не очень.

Я записал некоторые понравившиеся видео с ютуба в переводе от Яндекса для вашего удобства. Пришлось немного заморочиться. Мне лично больше всего понравился ролик на тему ИИ. Он самый первый в списке.

Оригиналы можно увидеть на youtube.

Всех ещё раз с праздником.

#юмор #видео
👍77👎5
У меня для вас прикольная находка. Впервые узнал про интересный проект sadservers.com. Это сервис, где вам предлагают виртуалки со сломанными сервисами, которые надо починить. Есть бесплатный и платный тариф. Для поиграть в качестве развлечения и обучения хватит и бесплатного.

Я прошёл одно задание и это неожиданно были интересно. Для регистрации ничего не надо. Просто залогинился со своей учёткой от google. Открыл список заданий и решил выбрать что-то среднее. Я вроде неплохо знаю Nginx, поэтому решил с него начать.

Задание выглядит так:

◽️Scenario: "Cape Town": Borked Nginx
◽️Level: Medium
◽️Description: There's an Nginx web server installed and managed by systemd. Running curl -I 127.0.0.1:80 returns curl: (7) Failed to connect to localhost port 80: Connection refused , fix it so when you curl you get the default Nginx page.
◽️Test: curl -Is 127.0.0.1:80|head -1 returns HTTP/1.1 200 OK
◽️Time to Solve: 15 minutes.
◽️OS: Debian 11
◽️Root (sudo) Access: Yes

Вам дают на время полноценную виртуалку. По крайней мере внешне она выглядит так. Подключение к терминалу происходит прямо в браузере.

Зашёл и сразу замешкался. Я обычно не использую sudo, а тут всё только через него. Постоянно забывал написал. Нет mc, без него навигация более долгая. Плюс, нет mcedit, надо nano использовать. Тоже непривычно, хоть и некритично. Короче, работать в незнакомом окружении неудобно.

Первое, что сделал, проверил, слушает ли Nginx указанный порт:

# sudo ss -tulnp

Оказалось, что нет. Ну, думаю, что-то очень лёгкое задание. Запускаю Nginx:

# sudo systemctl start nginx

Не стартует. Смотрю лог:

# tail -n 10 /var/log/nginx/error.log

Там ошибка в конфиге default.conf. Почему-то первой строкой стоит точка с запятой. Думаю, что-то всё равно очень просто. Убираю первую строку, перезапускаю Nginx, делаю проверку:

# curl -Is 127.0.0.1:80|head -1

На выходе 500-я ошибка. Тут уже интереснее. Думал, на этом задание и закончится. Оказалось, что нет. Опять лезу в лог ошибок. Там знакомое:

socketpair() failed (24: Too many open files)

Смотрю

ulimit -n

Вроде хватает с запасом. Потом вспоминаю, что это параметры текущего пользователя, а Nginx под своим запущен. Смотрю, какие у него лимиты:

# ps ax | grep nginx
850
# cat /proc/850/limits

Там уже не помню вывод, но для open files было значение 10. Решил вопрос самым быстрым способом. У Nginx отдельный параметр прямо в конфиге есть для этой настройки:

worker_rlimit_nofile 65536;

Я его всегда в свои конфигурации добавляю. Перезапустил Nginx и проверка прошла успешно. Можно было лимит изменить в systemd юните, или в системном /etc/security/limits.conf для пользователя nginx.

В целом было интересно. Я даже немного понервничал, так как тикает таймер обратного отсчёта. Нужно уложиться в 15 минут. Не знал, что будет, если не уложиться. Думал, что на бесплатном тарифе могут не разрешить повторить задание, а предложат либо заплатить, либо ждать сутки.

Лично мне задание показалось простым, так как кумекать особо не надо. Смотрим сервис, смотрим, конфиг, смотрим логи. Думать над проблемой не пришлось.

Интересная тема, рекомендую попробовать. Есть похожий сервис от обучающей платформы KodeKloud. Я писал о нём и тоже проходил задания. Но тут мне показалось интереснее. Если кто-то будет проходить другие задания, то расскажите, интересно было или нет.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#обучение
5👍211👎4