[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/systemd-cgroups":3,"mdc--bxnbmm-key":1157,"mdc-in0v6p-key":1166,"mdc-2ah64v-key":1183,"mdc--km73mr-key":1200,"mdc-1mnk28-key":1216,"mdc--uuz1z8-key":1224,"mdc-9amgry-key":1240,"mdc--jmrr1j-key":1277,"mdc-pp731-key":1293,"related-/guides/linux/systemd-journal,/guides/linux/systemd-service-files,/errors/linux/systemd-failed-to-start":1324},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":1092,"code":1092,"createdAt":1093,"description":1094,"difficulty":1095,"draft":1096,"estimatedTime":1097,"extension":1098,"faq":1099,"howToSteps":1112,"howToTotalTime":1128,"image":1092,"keywords":1129,"locale":1138,"meta":1139,"navigation":200,"path":1140,"platform":1141,"related":1142,"section":1146,"seo":1147,"severity":1092,"stem":1148,"summary":1149,"tags":1150,"twitterCreator":1092,"twitterSite":1092,"type":1155,"updatedAt":1093,"__hash__":1156},"content_ru/guides/linux/systemd-cgroups.md","Управление ресурсами Linux через systemd cgroups: полное руководство",[7,8,9,10],"systemd 235+","Linux ядро 4.5+","Ubuntu 18.04+","CentOS 8+","FixPedia Team",{"type":13,"value":14,"toc":1071},"minimark",[15,20,32,44,65,68,72,75,149,153,156,266,276,280,286,418,425,429,435,490,492,500,503,543,547,553,625,629,632,804,808,816,840,847,869,885,893,924,931,948,951,955,971,1057,1061,1067],[16,17,19],"h2",{"id":18},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,22,23,27,28,31],"p",{},[24,25,26],"strong",{},"Control Groups (cgroups)"," — это механизм ядра Linux, который позволяет изолировать и ограничивать использование ресурсов (CPU, памяти, дискового ввода-вывода, сети) для групп процессов. ",[24,29,30],{},"Systemd",", являющийся инициализатором и менеджером системных служб в большинстве современных дистрибутивов, предоставляет удобный и декларативный интерфейс для работы с cgroups.",[21,33,34,35,39,40,43],{},"Этот гайд покажет, как использовать встроенные возможности systemd для управления ресурсами без необходимости вручную работать с ",[36,37,38],"code",{},"cgcreate"," или редактировать файлы в ",[36,41,42],{},"/sys/fs/cgroup",". Вы сможете:",[45,46,47,51,54,57],"ul",{},[48,49,50],"li",{},"Ограничить объём оперативной памяти и файлового подкачивания (swap) для службы.",[48,52,53],{},"Установить лимит на использование CPU (в процентах или в ядрах).",[48,55,56],{},"Настроить приоритет дискового I/O.",[48,58,59,60,64],{},"Создавать логические группы процессов (срезы — ",[61,62,63],"em",{},"slices",") для единого управления ресурсами.",[21,66,67],{},"После выполнения этого руководства вы получите полный контроль над расходованием ресурсов вашими сервисами, что особенно важно для хостинга, контейнеризации и стабильной работы многопользовательских систем.",[16,69,71],{"id":70},"требования-подготовка","Требования / Подготовка",[21,73,74],{},"Перед началом убедитесь, что:",[76,77,78,89,103,136],"ol",{},[48,79,80,81,84,85,88],{},"У вас есть права ",[24,82,83],{},"root"," или пользователь с правами через ",[36,86,87],{},"sudo",".",[48,90,91,92,95,96,99,100,88],{},"Установлен ",[24,93,94],{},"systemd"," версии ",[24,97,98],{},"235"," или новее. Проверить: ",[36,101,102],{},"systemctl --version",[48,104,105,106,109,110,113,114],{},"Ядро Linux поддерживает ",[24,107,108],{},"cgroups v2"," (рекомендуется) или v1. Проверить тип иерархии: ",[36,111,112],{},"mount | grep cgroup",".\n",[45,115,116,125],{},[48,117,118,119,122,123,88],{},"Идеальный вариант: ",[36,120,121],{},"cgroup2"," смонтирован в ",[36,124,42],{},[48,126,127,128,131,132,135],{},"Если смонтированы старые контроллеры (",[36,129,130],{},"memory",", ",[36,133,134],{},"cpu"," и т.д.), systemd всё равно сможет управлять ими через единую иерархию.",[48,137,138,139,131,142,145,146,88],{},"Вы знаете имя службы systemd, для которой хотите задать ограничения (например, ",[36,140,141],{},"nginx.service",[36,143,144],{},"docker.service","). Список активных служб: ",[36,147,148],{},"systemctl list-units --type=service --state=running",[16,150,152],{"id":151},"шаг-1-проверьте-версию-systemd-и-поддержку-cgroups-v2","Шаг 1: Проверьте версию systemd и поддержку cgroups v2",[21,154,155],{},"Сначала давайте убедимся в готовности системы. Выполните в терминале:",[157,158,163],"pre",{"className":159,"code":160,"language":161,"meta":162,"style":162},"language-bash shiki shiki-themes github-light github-dark","# Проверка версии systemd (требуется 235+)\nsystemctl --version | head -n1\n\n# Проверка, что systemd использует cgroups v2 (предпочтительно)\n# Если в выводе есть \"cgroup2\", значит, используется единственный unified hierarchy.\nmount | grep -E 'cgroup|cgroup2'\n\n# Пример ожидаемого вывода для cgroups v2:\n# cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)\n\n# Если вы видите отдельные монтирования для memory, cpu, blkio и т.д. — это cgroups v1.\n# Systemd с ним тоже работает, но синтаксис некоторых директив может незначительно отличаться.\n","bash","",[36,164,165,174,195,202,208,214,232,237,243,249,254,260],{"__ignoreMap":162},[166,167,170],"span",{"class":168,"line":169},"line",1,[166,171,173],{"class":172},"sJ8bj","# Проверка версии systemd (требуется 235+)\n",[166,175,177,181,185,189,192],{"class":168,"line":176},2,[166,178,180],{"class":179},"sScJk","systemctl",[166,182,184],{"class":183},"sj4cs"," --version",[166,186,188],{"class":187},"szBVR"," |",[166,190,191],{"class":179}," head",[166,193,194],{"class":183}," -n1\n",[166,196,198],{"class":168,"line":197},3,[166,199,201],{"emptyLinePlaceholder":200},true,"\n",[166,203,205],{"class":168,"line":204},4,[166,206,207],{"class":172},"# Проверка, что systemd использует cgroups v2 (предпочтительно)\n",[166,209,211],{"class":168,"line":210},5,[166,212,213],{"class":172},"# Если в выводе есть \"cgroup2\", значит, используется единственный unified hierarchy.\n",[166,215,217,220,222,225,228],{"class":168,"line":216},6,[166,218,219],{"class":179},"mount",[166,221,188],{"class":187},[166,223,224],{"class":179}," grep",[166,226,227],{"class":183}," -E",[166,229,231],{"class":230},"sZZnC"," 'cgroup|cgroup2'\n",[166,233,235],{"class":168,"line":234},7,[166,236,201],{"emptyLinePlaceholder":200},[166,238,240],{"class":168,"line":239},8,[166,241,242],{"class":172},"# Пример ожидаемого вывода для cgroups v2:\n",[166,244,246],{"class":168,"line":245},9,[166,247,248],{"class":172},"# cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)\n",[166,250,252],{"class":168,"line":251},10,[166,253,201],{"emptyLinePlaceholder":200},[166,255,257],{"class":168,"line":256},11,[166,258,259],{"class":172},"# Если вы видите отдельные монтирования для memory, cpu, blkio и т.д. — это cgroups v1.\n",[166,261,263],{"class":168,"line":262},12,[166,264,265],{"class":172},"# Systemd с ним тоже работает, но синтаксис некоторых директив может незначительно отличаться.\n",[267,268,269],"blockquote",{},[21,270,271,272,275],{},"💡 ",[24,273,274],{},"Совет:"," На большинстве дистрибутивов, выпущенных после 2020 года (Ubuntu 20.04+, Fedora 31+, Debian 11+), по умолчанию используется cgroups v2.",[16,277,279],{"id":278},"шаг-2-создайте-кастомный-slice-необязательно-но-рекомендуется","Шаг 2: Создайте кастомный slice (необязательно, но рекомендуется)",[21,281,282,285],{},[24,283,284],{},"Slice"," — это своего рода папка в иерархии cgroups. Все процессы, запущенные внутри определённого слота, будут наследовать его ограничения ресурсов. Это удобно для группировки связанных служб (например, всех сервисов веб-приложения).",[76,287,288,314,363,376,394],{},[48,289,290,291,294,295,298,299],{},"Создайте конфигурационный файл для нового слота. Назовём его ",[36,292,293],{},"myapp.slice"," (замените ",[36,296,297],{},"myapp"," на осмысленное имя):",[157,300,302],{"className":159,"code":301,"language":161,"meta":162,"style":162},"sudo nano /etc/systemd/system/myapp.slice\n",[36,303,304],{"__ignoreMap":162},[166,305,306,308,311],{"class":168,"line":169},[166,307,87],{"class":179},[166,309,310],{"class":230}," nano",[166,312,313],{"class":230}," /etc/systemd/system/myapp.slice\n",[48,315,316,317,320,321],{},"Добавьте базовый контент. Мы зададим слоту описание и укажем, что он должен находиться внутри системного слота ",[36,318,319],{},"system.slice"," (стандартная практика):",[157,322,326],{"className":323,"code":324,"language":325,"meta":162,"style":162},"language-ini shiki shiki-themes github-light github-dark","[Slice]\n# Описание слота\nDescription=Slice для группировки сервисов моего приложения\n# Устанавливаем лимиты ВСЕМ юнитам внутри этого слота по умолчанию.\n# Эти значения можно переопределить в конфиге конкретного сервиса.\nMemoryMax=2G\nCPUQuota=50%\n","ini",[36,327,328,333,338,343,348,353,358],{"__ignoreMap":162},[166,329,330],{"class":168,"line":169},[166,331,332],{},"[Slice]\n",[166,334,335],{"class":168,"line":176},[166,336,337],{},"# Описание слота\n",[166,339,340],{"class":168,"line":197},[166,341,342],{},"Description=Slice для группировки сервисов моего приложения\n",[166,344,345],{"class":168,"line":204},[166,346,347],{},"# Устанавливаем лимиты ВСЕМ юнитам внутри этого слота по умолчанию.\n",[166,349,350],{"class":168,"line":210},[166,351,352],{},"# Эти значения можно переопределить в конфиге конкретного сервиса.\n",[166,354,355],{"class":168,"line":216},[166,356,357],{},"MemoryMax=2G\n",[166,359,360],{"class":168,"line":234},[166,361,362],{},"CPUQuota=50%\n",[48,364,365,366,131,369,131,372,375],{},"Сохраните файл (",[36,367,368],{},"Ctrl+O",[36,370,371],{},"Enter",[36,373,374],{},"Ctrl+X",").",[48,377,378,379],{},"Перезагрузите конфигурацию systemd:",[157,380,382],{"className":159,"code":381,"language":161,"meta":162,"style":162},"sudo systemctl daemon-reload\n",[36,383,384],{"__ignoreMap":162},[166,385,386,388,391],{"class":168,"line":169},[166,387,87],{"class":179},[166,389,390],{"class":230}," systemctl",[166,392,393],{"class":230}," daemon-reload\n",[48,395,396,397,400,401],{},"Активируйте слот (хотя он и не имеет состояния ",[36,398,399],{},"active",", его нужно \"загрузить\" в менеджер):",[157,402,404],{"className":159,"code":403,"language":161,"meta":162,"style":162},"sudo systemctl start myapp.slice\n",[36,405,406],{"__ignoreMap":162},[166,407,408,410,412,415],{"class":168,"line":169},[166,409,87],{"class":179},[166,411,390],{"class":230},[166,413,414],{"class":230}," start",[166,416,417],{"class":230}," myapp.slice\n",[21,419,420,421,424],{},"Теперь любой сервис, который вы добавите в этот слот (через ",[36,422,423],{},"Slice=myapp.slice"," в его конфиге), автоматически получит указанные выше ограничения, если не переопределит их самостоятельно.",[16,426,428],{"id":427},"шаг-3-настройте-ограничения-ресурсов-для-конкретного-юнита-сервиса","Шаг 3: Настройте ограничения ресурсов для конкретного юнита (сервиса)",[21,430,431,432,88],{},"Давайте добавим ограничения в конфигурационный файл вашего сервиса. Допустим, это ",[36,433,434],{},"myapp.service",[76,436,437,454],{},[48,438,439,440],{},"Создайте или отредактируйте файл юнита:",[157,441,443],{"className":159,"code":442,"language":161,"meta":162,"style":162},"sudo nano /etc/systemd/system/myapp.service\n",[36,444,445],{"__ignoreMap":162},[166,446,447,449,451],{"class":168,"line":169},[166,448,87],{"class":179},[166,450,310],{"class":230},[166,452,453],{"class":230}," /etc/systemd/system/myapp.service\n",[48,455,456,457,460,461,464,465],{},"В секцию ",[36,458,459],{},"[Service]"," добавьте нужные директивы. Полный список смотрите в ",[36,462,463],{},"man systemd.resource-control",". Пример конфигурации:",[157,466,468],{"className":323,"code":467,"language":325,"meta":162,"style":162},"[Unit]\nDescription=Моё важное приложение\n# Указываем, что сервис должен работать внутри нашего кастомного слота\n# (если вы создали слот на шаге 2). Если нет — пропустите эту строку.\n",[36,469,470,475,480,485],{"__ignoreMap":162},[166,471,472],{"class":168,"line":169},[166,473,474],{},"[Unit]\n",[166,476,477],{"class":168,"line":176},[166,478,479],{},"Description=Моё важное приложение\n",[166,481,482],{"class":168,"line":197},[166,483,484],{},"# Указываем, что сервис должен работать внутри нашего кастомного слота\n",[166,486,487],{"class":168,"line":204},[166,488,489],{},"# (если вы создали слот на шаге 2). Если нет — пропустите эту строку.\n",[21,491,423],{},[157,493,498],{"className":494,"code":496,"language":497},[495],"language-text","[Service]\nType=simple\nExecStart=/usr/local/bin/myapp\n# --- Ограничения ресурсов (переопределяют или дополняют слот) ---\n# Ограничение по оперативной памяти (включая кэш). При превышении процесс получит OOM.\nMemoryMax=1G\n# Ограничение по файловому подкачиванию (swap). Установите 0, чтобы запретить.\nMemorySwapMax=512M\n# Лимит на использование CPU. 50% = половина одного ядра.\nCPUQuota=50%\n# Дополнительно: можно задать приоритет по CPU (от 1 до 10000, чем выше, тем приоритетнее)\nCPUWeight=500\n# Ограничение по дисковому I/O (в IOPS). 1000 по умолчанию.\nIOWeight=300\n# Лимит на операции чтения/записи в секунду (требует cgroups v2).\n# IOReadBandwidthMax=/dev/sda 10M\n# IOWriteBandwidthMax=/dev/sda 5M\n\n[Install]\nWantedBy=multi-user.target\n```\n","text",[36,499,496],{"__ignoreMap":162},[21,501,502],{},"3.  Сохраните файл.",[76,504,505,523],{"start":204},[48,506,507,510,511],{},[24,508,509],{},"Критически важный шаг:"," Примените изменения конфигурации:",[157,512,513],{"className":159,"code":381,"language":161,"meta":162,"style":162},[36,514,515],{"__ignoreMap":162},[166,516,517,519,521],{"class":168,"line":169},[166,518,87],{"class":179},[166,520,390],{"class":230},[166,522,393],{"class":230},[48,524,525,526],{},"Перезапустите сервис, чтобы новые лимиты вступили в силу:",[157,527,529],{"className":159,"code":528,"language":161,"meta":162,"style":162},"sudo systemctl restart myapp.service\n",[36,530,531],{"__ignoreMap":162},[166,532,533,535,537,540],{"class":168,"line":169},[166,534,87],{"class":179},[166,536,390],{"class":230},[166,538,539],{"class":230}," restart",[166,541,542],{"class":230}," myapp.service\n",[16,544,546],{"id":545},"шаг-4-управление-свойствами-во-время-выполнения-временные-изменения","Шаг 4: Управление свойствами во время выполнения (временные изменения)",[21,548,549,550,88],{},"Иногда нужно быстро ограничить уже запущенный процесс без редактирования файлов. Используйте ",[36,551,552],{},"systemctl set-property",[45,554,555,594],{},[48,556,557,560,561],{},[24,558,559],{},"Для постоянного изменения"," (сохранится после перезагрузки сервиса):",[157,562,564],{"className":159,"code":563,"language":161,"meta":162,"style":162},"sudo systemctl set-property myapp.service MemoryMax=500M\nsudo systemctl restart myapp.service # Перезапуск обязателен!\n",[36,565,566,581],{"__ignoreMap":162},[166,567,568,570,572,575,578],{"class":168,"line":169},[166,569,87],{"class":179},[166,571,390],{"class":230},[166,573,574],{"class":230}," set-property",[166,576,577],{"class":230}," myapp.service",[166,579,580],{"class":230}," MemoryMax=500M\n",[166,582,583,585,587,589,591],{"class":168,"line":176},[166,584,87],{"class":179},[166,586,390],{"class":230},[166,588,539],{"class":230},[166,590,577],{"class":230},[166,592,593],{"class":172}," # Перезапуск обязателен!\n",[48,595,596,599,600,621,624],{},[24,597,598],{},"Для временного, \"сырого\" (runtime) изменения"," (дествует до перезагрузки systemd или сервиса):",[157,601,603],{"className":159,"code":602,"language":161,"meta":162,"style":162},"sudo systemctl set-property --runtime myapp.service CPUQuota=80%\n",[36,604,605],{"__ignoreMap":162},[166,606,607,609,611,613,616,618],{"class":168,"line":169},[166,608,87],{"class":179},[166,610,390],{"class":230},[166,612,574],{"class":230},[166,614,615],{"class":183}," --runtime",[166,617,577],{"class":230},[166,619,620],{"class":230}," CPUQuota=80%\n",[622,623],"br",{},"Это удобно для тестирования.",[16,626,628],{"id":627},"шаг-5-проверка-результата","Шаг 5: Проверка результата",[21,630,631],{},"После настройки и перезапуска сервиса проверьте, что лимиты применены.",[76,633,634,666,707,787],{},[48,635,636,639,653,655,656,131,659,131,662,665],{},[24,637,638],{},"Просмотр статуса сервиса и его cgroup-свойств:",[157,640,642],{"className":159,"code":641,"language":161,"meta":162,"style":162},"systemctl status myapp.service\n",[36,643,644],{"__ignoreMap":162},[166,645,646,648,651],{"class":168,"line":169},[166,647,180],{"class":179},[166,649,650],{"class":230}," status",[166,652,542],{"class":230},[622,654],{},"В выводе ищите строки, начинающиеся с ",[36,657,658],{},"Memory",[36,660,661],{},"CPU",[36,663,664],{},"Tasks",". Они покажут текущие лимиты и потребление.",[48,667,668,679,699,701,702,704,705,88],{},[24,669,670,671,674,675,678],{},"Использование ",[36,672,673],{},"systemd-cgtop"," (аналог ",[36,676,677],{},"top"," для cgroups):",[157,680,682],{"className":159,"code":681,"language":161,"meta":162,"style":162},"# Обновление каждые 2 секунды\nsystemd-cgtop -n 2\n",[36,683,684,689],{"__ignoreMap":162},[166,685,686],{"class":168,"line":169},[166,687,688],{"class":172},"# Обновление каждые 2 секунды\n",[166,690,691,693,696],{"class":168,"line":176},[166,692,673],{"class":179},[166,694,695],{"class":183}," -n",[166,697,698],{"class":183}," 2\n",[622,700],{},"Вы увидите иерархию всех cgroups systemd и потребление ими ресурсов (MEM, CPU, IO). Ваш сервис должен отображаться в ветке ",[36,703,319],{}," или вашего кастомного ",[36,706,293],{},[48,708,709,712,781,783,784,375],{},[24,710,711],{},"Прямой просмотр файлов в виртуальной файловой системе cgroups:",[157,713,715],{"className":159,"code":714,"language":161,"meta":162,"style":162},"# Перейдите в каталог вашего сервиса или слота\ncd /sys/fs/cgroup/$(systemctl show -p ControlGroup myapp.service | cut -d= -f2)\n# Посмотрите установленные лимиты (значения в байтах или процентах)\ncat memory.max\ncat cpu.max\n",[36,716,717,722,761,766,774],{"__ignoreMap":162},[166,718,719],{"class":168,"line":169},[166,720,721],{"class":172},"# Перейдите в каталог вашего сервиса или слота\n",[166,723,724,727,730,734,736,739,742,745,747,749,752,755,758],{"class":168,"line":176},[166,725,726],{"class":183},"cd",[166,728,729],{"class":230}," /sys/fs/cgroup/",[166,731,733],{"class":732},"sVt8B","$(",[166,735,180],{"class":179},[166,737,738],{"class":230}," show",[166,740,741],{"class":183}," -p",[166,743,744],{"class":230}," ControlGroup",[166,746,577],{"class":230},[166,748,188],{"class":187},[166,750,751],{"class":179}," cut",[166,753,754],{"class":183}," -d=",[166,756,757],{"class":183}," -f2",[166,759,760],{"class":732},")\n",[166,762,763],{"class":168,"line":197},[166,764,765],{"class":172},"# Посмотрите установленные лимиты (значения в байтах или процентах)\n",[166,767,768,771],{"class":168,"line":204},[166,769,770],{"class":179},"cat",[166,772,773],{"class":230}," memory.max\n",[166,775,776,778],{"class":168,"line":210},[166,777,770],{"class":179},[166,779,780],{"class":230}," cpu.max\n",[622,782],{},"Для cgroups v1 пути и имена файлов будут другими (например, ",[36,785,786],{},"memory.limit_in_bytes",[48,788,789,792,793,796,797,800,801,88],{},[24,790,791],{},"Проверка изнутри контейнера/процесса:"," Если приложение само может отдавать статистику (например, через ",[36,794,795],{},"/proc/self/status","), убедитесь, что ",[36,798,799],{},"VmRSS"," не превышает ",[36,802,803],{},"MemoryMax",[16,805,807],{"id":806},"возможные-проблемы","Возможные проблемы",[809,810,812,813],"h3",{"id":811},"проблема-сервис-не-стартует-или-падает-сразу-после-daemon-reload","Проблема: Сервис не стартует или падает сразу после ",[36,814,815],{},"daemon-reload",[21,817,818,821,822,825,826,113,829,832,833,836,837,88],{},[24,819,820],{},"Причина:"," Синтаксическая ошибка в конфигурационном файле ",[36,823,824],{},".service"," или ",[36,827,828],{},".slice",[24,830,831],{},"Решение:"," Проверьте корректность INI-файла. Используйте ",[36,834,835],{},"sudo systemctl status myapp.service"," — в выводе будет указана строка с ошибкой разбора. Также можно проверить синтаксис командой ",[36,838,839],{},"sudo systemd-analyze verify /etc/systemd/system/myapp.service",[809,841,843,844,846],{"id":842},"проблема-ограничения-memorymax-игнорируются-процесс-использует-больше-памяти","Проблема: Ограничения ",[36,845,803],{}," игнорируются, процесс использует больше памяти",[21,848,849,852,853,856,857,859,860,113,862,864,865,868],{},[24,850,851],{},"Причина 1:"," Включён ",[36,854,855],{},"MemorySwapMax",", и система активно использует swap. Ограничение ",[36,858,803],{}," работает только по RAM, а общий лимит (RAM+Swap) задаётся ",[36,861,855],{},[24,863,831],{}," Установите ",[36,866,867],{},"MemorySwapMax=0",", чтобы запретить использование swap для этого сервиса, или увеличьте оба лимита.",[21,870,871,874,875,877,878,825,881,884],{},[24,872,873],{},"Причина 2:"," Процесс запущен не от systemd (например, вручную из shell), а вы настраиваете юнит.\n",[24,876,831],{}," Убедитесь, что процесс является дочерним по отношению к юниту systemd. Используйте ",[36,879,880],{},"pstree -p | grep myapp",[36,882,883],{},"systemctl status myapp.service"," — там должен быть список PID процессов.",[809,886,888,889,892],{"id":887},"проблема-cpuquota50-не-ограничивает-процесс-до-50-одного-ядра","Проблема: ",[36,890,891],{},"CPUQuota=50%"," не ограничивает процесс до 50% одного ядра",[21,894,895,897,898,901,902,905,906,908,909,912,913,915,916,919,920,923],{},[24,896,820],{}," На многопроцессорной системе (например, 8 ядер) 50% от ",[61,899,900],{},"всех"," ядер — это 4 ядра. Если вы хотите ограничить процесс половиной ",[61,903,904],{},"одного"," ядра, нужно указать ",[36,907,891],{}," и убедиться, что ",[36,910,911],{},"AllowedCPUs"," не настроен. Если нужно именно \"поляра\", то это 100% от одного ядра. Проценты считаются от суммарной мощности всех доступных ядер.\n",[24,914,831],{}," Пересчитайте нужное значение. Для строгого ограничения одним ядром используйте ",[36,917,918],{},"CPUQuota=100%"," и ",[36,921,922],{},"AllowedCPUs=0-0"," (если нужно только ядро 0).",[809,925,927,928],{"id":926},"проблема-ошибка-failed-to-set-property-permission-denied-при-set-property","Проблема: Ошибка \"Failed to set property: Permission denied\" при ",[36,929,930],{},"set-property",[21,932,933,935,936,938,939,941,942,944,945,88],{},[24,934,820],{}," Вы пытаетесь изменить свойство, которое может быть установлено только в конфигурационном файле (некоторые свойства \"immutable\" после старта службы), или у вас недостаточно прав.\n",[24,937,831],{}," Используйте ",[36,940,87],{},". Если свойство действительно нельзя менять \"на лету\", внесите изменение в файл юнита и выполните ",[36,943,815],{}," + ",[36,946,947],{},"restart",[949,950],"in-article-ad",{},[16,952,954],{"id":953},"продвинутый-пример-создание-слота-для-группировки-контейнеров","Продвинутый пример: Создание слота для группировки контейнеров",[21,956,957,958,960,961,964,965,825,967,970],{},"Допустим, вы запускаете несколько Docker-контейнеров, но хотите, чтобы они не \"съедали\" все ресурсы сервера. Docker по умолчанию использует свой собственный cgroup-драйвер, но если вы настроили Docker на использование ",[36,959,94],{}," (через ",[36,962,963],{},"--exec-opt native.cgroupdriver=systemd","), то каждый контейнер станет дочерним ",[36,966,319],{},[36,968,969],{},"docker.slice",". Вы можете создать отдельный слот для группы контейнеров:",[76,972,973,1009,1015],{},[48,974,975,976,979,980],{},"Создайте ",[36,977,978],{},"/etc/systemd/system/containers.slice",":",[157,981,983],{"className":323,"code":982,"language":325,"meta":162,"style":162},"[Slice]\nDescription=Slice для изоляции контейнеров\n# Ограничим всю группу контейнеров 4 ядрами и 8 ГБ RAM\nCPUQuota=400%\nMemoryMax=8G\n",[36,984,985,989,994,999,1004],{"__ignoreMap":162},[166,986,987],{"class":168,"line":169},[166,988,332],{},[166,990,991],{"class":168,"line":176},[166,992,993],{},"Description=Slice для изоляции контейнеров\n",[166,995,996],{"class":168,"line":197},[166,997,998],{},"# Ограничим всю группу контейнеров 4 ядрами и 8 ГБ RAM\n",[166,1000,1001],{"class":168,"line":204},[166,1002,1003],{},"CPUQuota=400%\n",[166,1005,1006],{"class":168,"line":210},[166,1007,1008],{},"MemoryMax=8G\n",[48,1010,1011,1012,88],{},"Перезагрузите systemd: ",[36,1013,1014],{},"sudo systemctl daemon-reload",[48,1016,1017,1018,1021,1022,1050,1052,1053,1056],{},"При запуске контейнера через ",[36,1019,1020],{},"docker run"," укажите, в какой cgroup его поместить (это поддерживается Docker с systemd-драйвером):",[157,1023,1025],{"className":159,"code":1024,"language":161,"meta":162,"style":162},"docker run -d --name my_container --cgroup-parent=containers.slice nginx:alpine\n",[36,1026,1027],{"__ignoreMap":162},[166,1028,1029,1032,1035,1038,1041,1044,1047],{"class":168,"line":169},[166,1030,1031],{"class":179},"docker",[166,1033,1034],{"class":230}," run",[166,1036,1037],{"class":183}," -d",[166,1039,1040],{"class":183}," --name",[166,1042,1043],{"class":230}," my_container",[166,1045,1046],{"class":183}," --cgroup-parent=containers.slice",[166,1048,1049],{"class":230}," nginx:alpine\n",[622,1051],{},"Теперь все процессы в этом контейнере будут в ",[36,1054,1055],{},"containers.slice",", и их суммарное потребление не превысит заданных лимитов.",[16,1058,1060],{"id":1059},"заключение-не-добавлять-как-заголовок-просто-завершить-текст","Заключение (не добавлять как заголовок, просто завершить текст)",[21,1062,1063,1064,1066],{},"Вы освоили ключевые механизмы управления ресурсами через systemd и cgroups. Этот подход интегрирован в ОС и не требует установки дополнительного ПО. Помните, что слишком жёсткие лимиты могут привести к падению служб (OOM-киллер, троттлинг CPU), поэтому тестируйте конфигурации в staging-среде. Для более сложных сценариев (например, сетевые лимиты) изучайте дополнительные директивы в ",[36,1065,463],{}," и документацию ядра по cgroups v2.",[1068,1069,1070],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":162,"searchDepth":176,"depth":176,"links":1072},[1073,1074,1075,1076,1077,1078,1079,1080,1090,1091],{"id":18,"depth":176,"text":19},{"id":70,"depth":176,"text":71},{"id":151,"depth":176,"text":152},{"id":278,"depth":176,"text":279},{"id":427,"depth":176,"text":428},{"id":545,"depth":176,"text":546},{"id":627,"depth":176,"text":628},{"id":806,"depth":176,"text":807,"children":1081},[1082,1084,1086,1088],{"id":811,"depth":197,"text":1083},"Проблема: Сервис не стартует или падает сразу после daemon-reload",{"id":842,"depth":197,"text":1085},"Проблема: Ограничения MemoryMax игнорируются, процесс использует больше памяти",{"id":887,"depth":197,"text":1087},"Проблема: CPUQuota=50% не ограничивает процесс до 50% одного ядра",{"id":926,"depth":197,"text":1089},"Проблема: Ошибка \"Failed to set property: Permission denied\" при set-property",{"id":953,"depth":176,"text":954},{"id":1059,"depth":176,"text":1060},null,"2026-02-16 19:28:19","Пошаговое руководство по настройке control groups в systemd. Ограничивайте CPU, память и I/O для процессов без сторонних инструментов. Готовые примеры конфигураций.","medium",false,"20-30 мин","md",[1100,1103,1106,1109],{"question":1101,"answer":1102},"Чем cgroups в systemd отличаются от классических cgroups v1?","Systemd использует cgroups v2 (если ядро поддерживает) или управляет иерархией v1 через единый контроллер. Главное отличие — более простая и централизованная настройка через юниты, без ручного монтажа в /sys/fs/cgroup.",{"question":1104,"answer":1105},"Почему мои настройки MemoryMax не применяются?","Чаще всего это происходит из-за конфликта с другими ограничителями (например, MemorySwapMax) или потому, что юнит был перезапущен без перезагрузки systemd. Всегда используйте `systemctl daemon-reload` после изменения файла юнита.",{"question":1107,"answer":1108},"Можно ли управлять cgroups для уже запущенного процесса?","Да, через `systemctl set-property --runtime`. Но это временное решение. Для постоянного управления процесс должен быть обёрнут в systemd-юнит (service, scope, slice).",{"question":1110,"answer":1111},"Что такое slice и зачем он нужен?","Slice — это cgroup-контейнер для группировки процессов (например, `system.slice` для системных сервисов). Создавая свой slice, вы можете задать лимиты ресурсов для целой группы юнитов, а не для каждого по отдельности.",[1113,1116,1119,1122,1125],{"name":1114,"text":1115},"Проверьте версию systemd и поддержку cgroups v2","Убедитесь, что ваша система использует systemd 235+ и ядро с поддержкой cgroups v2 (рекомендуется). Выполните команды для проверки.",{"name":1117,"text":1118},"Создайте кастомный slice для группировки сервисов","Создайте конфигурационный файл для нового слота (например, `myapp.slice`), который будет служить родительской cgroup для ваших приложений.",{"name":1120,"text":1121},"Настройте ограничения ресурсов для юнита (сервиса)","Добавьте директивы `MemoryMax`, `CPUQuota`, `IOWeight` в секцию `[Service]` файла вашего сервиса или в конфиг слота.",{"name":1123,"text":1124},"Перезагрузите конфигурацию systemd и примените настройки","Выполните `systemctl daemon-reload`, затем перезапустите целевой сервис или слот для вступления изменений в силу.",{"name":1126,"text":1127},"Убедитесь, что ограничения работают","Используйте `systemctl status`, `systemd-cgtop` и просмотр файлов в `/sys/fs/cgroup/` для проверки применённых лимитов и текущего потребления.","PT25M",[1130,1131,1132,1133,1134,1135,1136,1137],"systemd cgroups","управление ресурсами linux","ограничение памяти systemd","cpu quota systemd","control groups linux","systemd slice scope","как создать cgroup","systemd-resource-control","ru_RU",{},"/guides/linux/systemd-cgroups","linux",[1143,1144,1145],"/guides/linux/systemd-journal","/guides/linux/systemd-service-files","/errors/linux/systemd-failed-to-start","Гайды Linux",{"title":5,"description":1094},"guides/linux/systemd-cgroups","Этот гайд подробно объясняет, как использовать встроенные возможности systemd для создания и управления cgroups (control groups). Вы научитесь ограничивать ресурсы (CPU, память, дисковый I/O) для отдельных сервисов или групп процессов, что критично для стабильности сервера и изоляции рабочих нагрузок.",[94,1151,1141,1152,1153,1154],"cgroups","администрирование","ресурсы","performance","guide","zZzxcW3rf6azgs7IUC_0NKOR74bLCdCzLUP3k27IwgM",{"data":1158,"body":1159},{},{"type":83,"children":1160},[1161],{"type":1162,"tag":21,"props":1163,"children":1164},"element",{},[1165],{"type":497,"value":1102},{"data":1167,"body":1168},{},{"type":83,"children":1169},[1170],{"type":1162,"tag":21,"props":1171,"children":1172},{},[1173,1175,1181],{"type":497,"value":1174},"Чаще всего это происходит из-за конфликта с другими ограничителями (например, MemorySwapMax) или потому, что юнит был перезапущен без перезагрузки systemd. Всегда используйте ",{"type":1162,"tag":36,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":497,"value":1180},"systemctl daemon-reload",{"type":497,"value":1182}," после изменения файла юнита.",{"data":1184,"body":1185},{},{"type":83,"children":1186},[1187],{"type":1162,"tag":21,"props":1188,"children":1189},{},[1190,1192,1198],{"type":497,"value":1191},"Да, через ",{"type":1162,"tag":36,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":497,"value":1197},"systemctl set-property --runtime",{"type":497,"value":1199},". Но это временное решение. Для постоянного управления процесс должен быть обёрнут в systemd-юнит (service, scope, slice).",{"data":1201,"body":1202},{},{"type":83,"children":1203},[1204],{"type":1162,"tag":21,"props":1205,"children":1206},{},[1207,1209,1214],{"type":497,"value":1208},"Slice — это cgroup-контейнер для группировки процессов (например, ",{"type":1162,"tag":36,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":497,"value":319},{"type":497,"value":1215}," для системных сервисов). Создавая свой slice, вы можете задать лимиты ресурсов для целой группы юнитов, а не для каждого по отдельности.",{"data":1217,"body":1218},{},{"type":83,"children":1219},[1220],{"type":1162,"tag":21,"props":1221,"children":1222},{},[1223],{"type":497,"value":1115},{"data":1225,"body":1226},{},{"type":83,"children":1227},[1228],{"type":1162,"tag":21,"props":1229,"children":1230},{},[1231,1233,1238],{"type":497,"value":1232},"Создайте конфигурационный файл для нового слота (например, ",{"type":1162,"tag":36,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":497,"value":293},{"type":497,"value":1239},"), который будет служить родительской cgroup для ваших приложений.",{"data":1241,"body":1242},{},{"type":83,"children":1243},[1244],{"type":1162,"tag":21,"props":1245,"children":1246},{},[1247,1249,1254,1255,1261,1262,1268,1270,1275],{"type":497,"value":1248},"Добавьте директивы ",{"type":1162,"tag":36,"props":1250,"children":1252},{"className":1251},[],[1253],{"type":497,"value":803},{"type":497,"value":131},{"type":1162,"tag":36,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":497,"value":1260},"CPUQuota",{"type":497,"value":131},{"type":1162,"tag":36,"props":1263,"children":1265},{"className":1264},[],[1266],{"type":497,"value":1267},"IOWeight",{"type":497,"value":1269}," в секцию ",{"type":1162,"tag":36,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":497,"value":459},{"type":497,"value":1276}," файла вашего сервиса или в конфиг слота.",{"data":1278,"body":1279},{},{"type":83,"children":1280},[1281],{"type":1162,"tag":21,"props":1282,"children":1283},{},[1284,1286,1291],{"type":497,"value":1285},"Выполните ",{"type":1162,"tag":36,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":497,"value":1180},{"type":497,"value":1292},", затем перезапустите целевой сервис или слот для вступления изменений в силу.",{"data":1294,"body":1295},{},{"type":83,"children":1296},[1297],{"type":1162,"tag":21,"props":1298,"children":1299},{},[1300,1302,1308,1309,1314,1316,1322],{"type":497,"value":1301},"Используйте ",{"type":1162,"tag":36,"props":1303,"children":1305},{"className":1304},[],[1306],{"type":497,"value":1307},"systemctl status",{"type":497,"value":131},{"type":1162,"tag":36,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":497,"value":673},{"type":497,"value":1315}," и просмотр файлов в ",{"type":1162,"tag":36,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":497,"value":1321},"/sys/fs/cgroup/",{"type":497,"value":1323}," для проверки применённых лимитов и текущего потребления.",[1325,2146],{"id":1326,"title":1327,"appliesTo":1328,"author":11,"body":1333,"canonical":1092,"code":1092,"createdAt":2093,"description":2094,"difficulty":1095,"draft":1096,"estimatedTime":2095,"extension":1098,"faq":2096,"howToSteps":2109,"howToTotalTime":2125,"image":1092,"keywords":2126,"locale":1138,"meta":2134,"navigation":200,"path":1144,"platform":1141,"related":2135,"section":1146,"seo":2138,"severity":1092,"stem":2139,"summary":2140,"tags":2141,"twitterCreator":1092,"twitterSite":1092,"type":1155,"updatedAt":2093,"__hash__":2145},"content_ru/guides/linux/systemd-service-files.md","Создаем systemd-сервис: полное руководство по настройке автозапуска",[1329,1330,1331,1332],"Ubuntu 20.04+","Debian 11+","CentOS/RHEL 8+","Fedora 35+",{"type":13,"value":1334,"toc":2075},[1335,1337,1347,1350,1352,1354,1380,1383,1387,1399,1433,1449,1451,1455,1458,1538,1543,1685,1700,1702,1706,1709,1721,1727,1729,1733,1736,1792,1794,1796,1800,1803,1821,1826,1849,1855,1924,1926,1928,1936,1964,1976,2009,2013,2044,2051,2072],[16,1336,19],{"id":18},[21,1338,1339,1340,1343,1344,88],{},"Systemd — это система инициализации и менеджер служб, который используется по умолчанию в большинстве современных дистрибутивов Linux (Ubuntu, Fedora, Debian, CentOS). Вместо скриптов в ",[36,1341,1342],{},"/etc/init.d/"," вы работаете с декларативными юнит-файлами (unit files). Этот подход даёт мощные возможности: управление зависимостями, параллельный запуск, автоматический перезапуск упавших процессов и централизованное логирование через ",[36,1345,1346],{},"journald",[21,1348,1349],{},"В этом гайде вы научитесь создавать собственные systemd-сервисы для запуска ваших приложений, скриптов или демонов в фоне с контролем над их жизненным циклом.",[16,1351,71],{"id":70},[21,1353,74],{},[76,1355,1356,1362,1371,1374],{},[48,1357,1358,1359,1361],{},"У вас есть доступ к терминалу Linux с правами ",[24,1360,87],{}," (администратора).",[48,1363,1364,1365,131,1368,375],{},"Вы знакомы с базовыми командами редактирования файлов (",[36,1366,1367],{},"nano",[36,1369,1370],{},"vim",[48,1372,1373],{},"Путь к исполняемому файлу или скрипту, который вы хотите запустить как сервис, известен и доступен.",[48,1375,1376,1377,375],{},"Дистрибутив использует systemd (проверить можно командой ",[36,1378,1379],{},"pidof systemd",[1381,1382],"hr",{},[16,1384,1386],{"id":1385},"шаг-1-создайте-юнит-файл-сервиса","Шаг 1: Создайте юнит-файл сервиса",[21,1388,1389,1390,1395,1396,1398],{},"Все пользовательские юнит-файлы сервисов размещаются в ",[24,1391,1392],{},[36,1393,1394],{},"/etc/systemd/system/",". Имя файла должно заканчиваться на ",[36,1397,824],{}," и обычно совпадает с логическим именем сервиса.",[157,1400,1402],{"className":159,"code":1401,"language":161,"meta":162,"style":162},"# Перейдите в системную директорию для юнитов\ncd /etc/systemd/system/\n\n# Создайте файл сервиса (замените myapp на своё имя)\nsudo nano myapp.service\n",[36,1403,1404,1409,1416,1420,1425],{"__ignoreMap":162},[166,1405,1406],{"class":168,"line":169},[166,1407,1408],{"class":172},"# Перейдите в системную директорию для юнитов\n",[166,1410,1411,1413],{"class":168,"line":176},[166,1412,726],{"class":183},[166,1414,1415],{"class":230}," /etc/systemd/system/\n",[166,1417,1418],{"class":168,"line":197},[166,1419,201],{"emptyLinePlaceholder":200},[166,1421,1422],{"class":168,"line":204},[166,1423,1424],{"class":172},"# Создайте файл сервиса (замените myapp на своё имя)\n",[166,1426,1427,1429,1431],{"class":168,"line":210},[166,1428,87],{"class":179},[166,1430,310],{"class":230},[166,1432,542],{"class":230},[267,1434,1435],{},[21,1436,1437,1438,1441,1442,1445,1446,1448],{},"⚠️ ",[24,1439,1440],{},"Важно:"," Не создавайте файлы напрямую в ",[36,1443,1444],{},"/lib/systemd/system/"," — эта директория предназначена для пакетов дистрибутива. Ваши ручные правки в ",[36,1447,1394],{}," будут приоритетнее.",[1381,1450],{},[16,1452,1454],{"id":1453},"шаг-2-напишите-конфигурацию-юнит-файла","Шаг 2: Напишите конфигурацию юнит-файла",[21,1456,1457],{},"Юнит-файл состоит из нескольких секций. Вот минимальный, но рабочий шаблон:",[157,1459,1461],{"className":323,"code":1460,"language":325,"meta":162,"style":162},"[Unit]\nDescription=Мой кастомный сервис\nDocumentation=man:myapp(1)\nAfter=network.target\n\n[Service]\nType=simple\nUser=ваш_пользователь\nGroup=ваша_группа\nExecStart=/полный/путь/к/вашему/скрипту_или_бинарнику\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n",[36,1462,1463,1467,1472,1477,1482,1486,1491,1496,1501,1506,1511,1516,1521,1526,1532],{"__ignoreMap":162},[166,1464,1465],{"class":168,"line":169},[166,1466,474],{},[166,1468,1469],{"class":168,"line":176},[166,1470,1471],{},"Description=Мой кастомный сервис\n",[166,1473,1474],{"class":168,"line":197},[166,1475,1476],{},"Documentation=man:myapp(1)\n",[166,1478,1479],{"class":168,"line":204},[166,1480,1481],{},"After=network.target\n",[166,1483,1484],{"class":168,"line":210},[166,1485,201],{"emptyLinePlaceholder":200},[166,1487,1488],{"class":168,"line":216},[166,1489,1490],{},"[Service]\n",[166,1492,1493],{"class":168,"line":234},[166,1494,1495],{},"Type=simple\n",[166,1497,1498],{"class":168,"line":239},[166,1499,1500],{},"User=ваш_пользователь\n",[166,1502,1503],{"class":168,"line":245},[166,1504,1505],{},"Group=ваша_группа\n",[166,1507,1508],{"class":168,"line":251},[166,1509,1510],{},"ExecStart=/полный/путь/к/вашему/скрипту_или_бинарнику\n",[166,1512,1513],{"class":168,"line":256},[166,1514,1515],{},"Restart=on-failure\n",[166,1517,1518],{"class":168,"line":262},[166,1519,1520],{},"RestartSec=5\n",[166,1522,1524],{"class":168,"line":1523},13,[166,1525,201],{"emptyLinePlaceholder":200},[166,1527,1529],{"class":168,"line":1528},14,[166,1530,1531],{},"[Install]\n",[166,1533,1535],{"class":168,"line":1534},15,[166,1536,1537],{},"WantedBy=multi-user.target\n",[21,1539,1540],{},[24,1541,1542],{},"Разбор секций:",[45,1544,1545,1581,1654],{},[48,1546,1547,1552,1553],{},[24,1548,1549],{},[36,1550,1551],{},"[Unit]"," — метаданные и зависимости.\n",[45,1554,1555,1561,1575],{},[48,1556,1557,1560],{},[36,1558,1559],{},"Description"," — краткое описание сервиса.",[48,1562,1563,1566,1567,1570,1571,1574],{},[36,1564,1565],{},"After="," — указывает, что этот сервис должен запускаться ",[61,1568,1569],{},"после"," указанных. ",[36,1572,1573],{},"network.target"," — частый вариант для сетевых приложений.",[48,1576,1577,1580],{},[36,1578,1579],{},"Requires="," — жёсткая зависимость (если указанный сервис упадёт, упадёт и этот).",[48,1582,1583,1587,1588],{},[24,1584,1585],{},[36,1586,459],{}," — ядро конфигурации.\n",[45,1589,1590,1607,1621,1634,1648],{},[48,1591,1592,1595,1596,1599,1600,1603,1604,88],{},[36,1593,1594],{},"Type="," — тип сервиса. ",[36,1597,1598],{},"simple"," (по умолчанию) — процесс запускается и работает в foreground. ",[36,1601,1602],{},"forking"," — для демонов, которые делают ",[36,1605,1606],{},"fork()",[48,1608,1609,1612,1613,1616,1617,1620],{},[36,1610,1611],{},"User="," / ",[36,1614,1615],{},"Group="," — от имени кого запускать процесс. ",[24,1618,1619],{},"Крайне рекомендуется"," не запускать всё от root.",[48,1622,1623,1626,1627,1630,1631,375],{},[36,1624,1625],{},"ExecStart="," — ",[24,1628,1629],{},"обязательная директива",". Полный путь к исполняемому файлу или скрипту. Скрипт должен быть исполняемым (",[36,1632,1633],{},"chmod +x скрипт.sh",[48,1635,1636,1639,1640,1643,1644,1647],{},[36,1637,1638],{},"Restart="," — политика перезапуска. ",[36,1641,1642],{},"on-failure"," — перезапускать при ненулевом коде выхода. ",[36,1645,1646],{},"always"," — всегда.",[48,1649,1650,1653],{},[36,1651,1652],{},"RestartSec="," — задержка перед перезапуском в секундах.",[48,1655,1656,1661,1662,113,1665],{},[24,1657,1658],{},[36,1659,1660],{},"[Install]"," — инструкции для ",[36,1663,1664],{},"systemctl enable",[45,1666,1667],{},[48,1668,1669,1672,1673,1676,1677,1680,1681,1684],{},[36,1670,1671],{},"WantedBy="," — определяет, в каком ",[61,1674,1675],{},"целевом состоянии"," (",[36,1678,1679],{},"target",") должен быть включён сервис. ",[36,1682,1683],{},"multi-user.target"," — стандартный многопользовательский режим (аналог runlevel 3/5).",[267,1686,1687],{},[21,1688,271,1689,1691,1692,1695,1696,1699],{},[24,1690,274],{}," Для простых скриптов часто достаточно шаблона выше. Для Java-приложений или сложных сред может понадобиться ",[36,1693,1694],{},"EnvironmentFile="," (загрузка переменных окружения из файла) или ",[36,1697,1698],{},"ExecStartPre="," (команда перед запуском).",[1381,1701],{},[16,1703,1705],{"id":1704},"шаг-3-перезагрузите-конфигурацию-systemd","Шаг 3: Перезагрузите конфигурацию systemd",[21,1707,1708],{},"После сохранения файла systemd должен «увидеть» новый юнит. Выполните:",[157,1710,1711],{"className":159,"code":381,"language":161,"meta":162,"style":162},[36,1712,1713],{"__ignoreMap":162},[166,1714,1715,1717,1719],{"class":168,"line":169},[166,1716,87],{"class":179},[166,1718,390],{"class":230},[166,1720,393],{"class":230},[21,1722,1723,1724,1726],{},"Эта команда заставляет systemd перечитать все юнит-файлы с диска. Без неё ",[36,1725,180],{}," будет работать со старой копией конфигурации.",[1381,1728],{},[16,1730,1732],{"id":1731},"шаг-4-включите-и-запустите-сервис","Шаг 4: Включите и запустите сервис",[21,1734,1735],{},"Теперь можно активировать сервис.",[76,1737,1738,1771],{},[48,1739,1740,1743,1744,1747,1748,1764,1766,1767,1770],{},[24,1741,1742],{},"Включите для автозапуска"," (создаст симлинк в ",[36,1745,1746],{},"/etc/systemd/system/multi-user.target.wants/","):",[157,1749,1751],{"className":159,"code":1750,"language":161,"meta":162,"style":162},"sudo systemctl enable myapp.service\n",[36,1752,1753],{"__ignoreMap":162},[166,1754,1755,1757,1759,1762],{"class":168,"line":169},[166,1756,87],{"class":179},[166,1758,390],{"class":230},[166,1760,1761],{"class":230}," enable",[166,1763,542],{"class":230},[622,1765],{},"Вывод ",[36,1768,1769],{},"Created symlink /etc/systemd/system/multi-user.target.wants/myapp.service → /etc/systemd/system/myapp.service."," означает успех.",[48,1772,1773,1776,1777],{},[24,1774,1775],{},"Запустите немедленно"," без перезагрузки:",[157,1778,1780],{"className":159,"code":1779,"language":161,"meta":162,"style":162},"sudo systemctl start myapp.service\n",[36,1781,1782],{"__ignoreMap":162},[166,1783,1784,1786,1788,1790],{"class":168,"line":169},[166,1785,87],{"class":179},[166,1787,390],{"class":230},[166,1789,414],{"class":230},[166,1791,542],{"class":230},[949,1793],{},[1381,1795],{},[16,1797,1799],{"id":1798},"шаг-5-проверьте-статус-и-логи","Шаг 5: Проверьте статус и логи",[21,1801,1802],{},"Убедитесь, что сервис работает штатно.",[157,1804,1806],{"className":159,"code":1805,"language":161,"meta":162,"style":162},"# Основная команда проверки\nsystemctl status myapp.service\n",[36,1807,1808,1813],{"__ignoreMap":162},[166,1809,1810],{"class":168,"line":169},[166,1811,1812],{"class":172},"# Основная команда проверки\n",[166,1814,1815,1817,1819],{"class":168,"line":176},[166,1816,180],{"class":179},[166,1818,650],{"class":230},[166,1820,542],{"class":230},[21,1822,1823],{},[24,1824,1825],{},"Что искать в выводе:",[45,1827,1828,1834,1840],{},[48,1829,1830,1833],{},[36,1831,1832],{},"Active: active (running)"," — сервис жив.",[48,1835,1836,1839],{},[36,1837,1838],{},"Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: enabled)"," — файл загружен и включён.",[48,1841,1842,1843,825,1846,88],{},"Никаких красных строк ",[36,1844,1845],{},"Failed",[36,1847,1848],{},"inactive (dead)",[21,1850,1851,1852,979],{},"Для детального просмотра логов используйте ",[36,1853,1854],{},"journalctl",[157,1856,1858],{"className":159,"code":1857,"language":161,"meta":162,"style":162},"# Показать все логи сервиса (с самого начала)\nsudo journalctl -u myapp.service\n\n# Отслеживать логи в реальном времени (как tail -f)\nsudo journalctl -u myapp.service -f\n\n# Показать логи за последние 10 минут\nsudo journalctl -u myapp.service --since \"10 minutes ago\"\n",[36,1859,1860,1865,1877,1881,1886,1899,1903,1908],{"__ignoreMap":162},[166,1861,1862],{"class":168,"line":169},[166,1863,1864],{"class":172},"# Показать все логи сервиса (с самого начала)\n",[166,1866,1867,1869,1872,1875],{"class":168,"line":176},[166,1868,87],{"class":179},[166,1870,1871],{"class":230}," journalctl",[166,1873,1874],{"class":183}," -u",[166,1876,542],{"class":230},[166,1878,1879],{"class":168,"line":197},[166,1880,201],{"emptyLinePlaceholder":200},[166,1882,1883],{"class":168,"line":204},[166,1884,1885],{"class":172},"# Отслеживать логи в реальном времени (как tail -f)\n",[166,1887,1888,1890,1892,1894,1896],{"class":168,"line":210},[166,1889,87],{"class":179},[166,1891,1871],{"class":230},[166,1893,1874],{"class":183},[166,1895,577],{"class":230},[166,1897,1898],{"class":183}," -f\n",[166,1900,1901],{"class":168,"line":216},[166,1902,201],{"emptyLinePlaceholder":200},[166,1904,1905],{"class":168,"line":234},[166,1906,1907],{"class":172},"# Показать логи за последние 10 минут\n",[166,1909,1910,1912,1914,1916,1918,1921],{"class":168,"line":239},[166,1911,87],{"class":179},[166,1913,1871],{"class":230},[166,1915,1874],{"class":183},[166,1917,577],{"class":230},[166,1919,1920],{"class":183}," --since",[166,1922,1923],{"class":230}," \"10 minutes ago\"\n",[1381,1925],{},[16,1927,807],{"id":806},[809,1929,1931,1932,1935],{"id":1930},"_1-ошибка-failed-to-start-или-сервис-сразу-падает","1. Ошибка ",[36,1933,1934],{},"Failed to start..."," или сервис сразу падает",[45,1937,1938,1946,1954],{},[48,1939,1940,1942,1943,88],{},[24,1941,820],{}," Ошибка в самом приложении/скрипте, который запускает ",[36,1944,1945],{},"ExecStart",[48,1947,1948,1950,1951,1953],{},[24,1949,831],{}," Запустите команду из ",[36,1952,1945],{}," вручную в терминале, чтобы увидеть её вывод. Проверьте права на файл и пути к зависимым библиотекам/файлам.",[48,1955,1956,1959,1960,1963],{},[24,1957,1958],{},"Диагностика:"," ",[36,1961,1962],{},"journalctl -u myapp.service -n 50 --no-pager"," покажет последние 50 строк логов сервиса.",[809,1965,1967,1968,1971,1972,1975],{"id":1966},"_2-сервис-не-включается-enable-создаёт-symlink-но-после-reload-статус-disabled","2. Сервис не включается (",[36,1969,1970],{},"enable"," создаёт symlink, но после reload статус ",[36,1973,1974],{},"disabled",")",[45,1977,1978,1992],{},[48,1979,1980,1982,1983,1985,1986,825,1988,1991],{},[24,1981,820],{}," В секции ",[36,1984,1660],{}," отсутствует ",[36,1987,1671],{},[36,1989,1990],{},"RequiredBy=",", либо указан неверный target.",[48,1993,1994,1996,1997,2000,2001,2004,2005,919,2007,88],{},[24,1995,831],{}," Добавьте ",[36,1998,1999],{},"WantedBy=multi-user.target"," (для фоновых служб) или ",[36,2002,2003],{},"WantedBy=graphical.target"," (для GUI-приложений). Перевыполните ",[36,2006,815],{},[36,2008,1970],{},[809,2010,2012],{"id":2011},"_3-сервис-запускается-но-не-работает-как-ожидается-нет-доступа-к-сети-файлам","3. Сервис запускается, но не работает как ожидается (нет доступа к сети, файлам)",[45,2014,2015,2020],{},[48,2016,2017,2019],{},[24,2018,820],{}," Проблема с контекстом безопасности. Сервис запускается в изолированном окружении.",[48,2021,2022,2024],{},[24,2023,831],{},[45,2025,2026,2034,2041],{},[48,2027,2028,2029,919,2031,2033],{},"Убедитесь, что ",[36,2030,1611],{},[36,2032,1615],{}," указаны правильно.",[48,2035,2036,2037,2040],{},"Для доступа к сетевым портам \u003C1024 могут потребоваться дополнительные capabilities (",[36,2038,2039],{},"AmbientCapabilities=CAP_NET_BIND_SERVICE",") или запуск от root (не рекомендуется).",[48,2042,2043],{},"Проверьте, что у указанного пользователя есть права на чтение/запись в нужные директории.",[809,2045,2047,2048],{"id":2046},"_4-ошибка-dependency-failed-for","4. Ошибка ",[36,2049,2050],{},"Dependency failed for...",[45,2052,2053,2063],{},[48,2054,2055,2057,2058,131,2060,2062],{},[24,2056,820],{}," Сервис имеет зависимость (",[36,2059,1565],{},[36,2061,1579],{},") от другой службы, которая не запустилась или не существует.",[48,2064,2065,2067,2068,2071],{},[24,2066,831],{}," Проверьте статус зависимых служб (",[36,2069,2070],{},"systemctl status network.target"," или вашей_зависимости.service). Убедитесь, что имена зависимостей написаны правильно.",[1068,2073,2074],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":162,"searchDepth":176,"depth":176,"links":2076},[2077,2078,2079,2080,2081,2082,2083,2084],{"id":18,"depth":176,"text":19},{"id":70,"depth":176,"text":71},{"id":1385,"depth":176,"text":1386},{"id":1453,"depth":176,"text":1454},{"id":1704,"depth":176,"text":1705},{"id":1731,"depth":176,"text":1732},{"id":1798,"depth":176,"text":1799},{"id":806,"depth":176,"text":807,"children":2085},[2086,2088,2090,2091],{"id":1930,"depth":197,"text":2087},"1. Ошибка Failed to start... или сервис сразу падает",{"id":1966,"depth":197,"text":2089},"2. Сервис не включается (enable создаёт symlink, но после reload статус disabled)",{"id":2011,"depth":197,"text":2012},{"id":2046,"depth":197,"text":2092},"4. Ошибка Dependency failed for...","2026-02-17 12:02:04","Пошаговое руководство по созданию и управлению службами systemd в Linux. Научитесь писать unit-файлы, настраивать автозапуск и диагностировать проблемы за 15 минут.","15-30 мин",[2097,2100,2103,2106],{"question":2098,"answer":2099},"Как проверить, что сервис systemd запустился успешно?","Используйте команду `systemctl status \u003Cимя_сервиса>`. В выводе ищите строку `Active: active (running)` и убедитесь, что нет ошибок в разделе `Loaded`.",{"question":2101,"answer":2102},"Почему мой сервис не запускается автоматически после загрузки?","Наиболее частая причина — вы не включили сервис для автозапуска. Выполните `sudo systemctl enable \u003Cимя_сервиса>`. Также проверьте, нет ли конфликтующих зависимостей в разделе `[Install]`.",{"question":2104,"answer":2105},"Где хранятся логи моего systemd-сервиса?","Логи всех служб systemd по умолчанию собираются в `journald`. Просмотрите их командой `sudo journalctl -u \u003Cимя_сервиса> -f` для отслеживания в реальном времени.",{"question":2107,"answer":2108},"Можно ли запустить сервис от имени другого пользователя?","Да. В юнит-файле используйте директиву `User=` и `Group=` в разделе `[Service]`. Убедитесь, что у указанного пользователя есть необходимые права на доступ к файлам и сокетам.",[2110,2113,2116,2119,2122],{"name":2111,"text":2112},"Создайте юнит-файл сервиса","Создайте новый файл с расширением `.service` в директории `/etc/systemd/system/`. Название файла будет именем вашего сервиса (например, `myapp.service`).",{"name":2114,"text":2115},"Напишите конфигурацию юнит-файла","Откройте файл в текстовом редакторе (например, `sudo nano /etc/systemd/system/myapp.service`) и заполните обязательные секции `[Unit]`, `[Service]` и `[Install]`.",{"name":2117,"text":2118},"Перезагрузите конфигурацию systemd","После создания или изменения юнит-файлов выполните `sudo systemctl daemon-reload`, чтобы systemd распознал новые или изменённые юниты.",{"name":2120,"text":2121},"Включите и запустите сервис","Включите сервис для автозапуска при загрузке (`sudo systemctl enable myapp.service`) и запустите его немедленно (`sudo systemctl start myapp.service`).",{"name":2123,"text":2124},"Проверьте статус и логи","Убедитесь, что сервис работает без ошибок, проверив его статус (`systemctl status myapp.service`) и логи (`sudo journalctl -u myapp.service -n 50`).","PT30M",[2127,2128,1664,2129,2130,2131,2132,2133],"systemd service файл","как создать systemd сервис","unit файл systemd пример","автозапуск программы в linux","systemd journalctl","ошибка systemd dependency","настройка службы linux",{},[2136,2137,1145],"/guides/linux/systemctl-commands","/guides/linux/journald-logs",{"title":1327,"description":2094},"guides/linux/systemd-service-files","В этом гайде вы узнаете, как создавать, настраивать и управлять службами systemd — стандартом для инициализации и управления процессами в современных дистрибутивах Linux.",[94,1141,2142,2143,2144,180],"sysadmin","автозапуск","сервис","XV3rhXS4H2kkPzSyPMDweXmWnoN5KQ_4hpjZy3XHiBs",{"id":2147,"title":2148,"appliesTo":2149,"author":11,"body":2151,"canonical":1092,"code":3003,"createdAt":3004,"description":3005,"difficulty":1095,"draft":1096,"estimatedTime":3006,"extension":1098,"faq":3007,"howToSteps":3020,"howToTotalTime":3039,"image":1092,"keywords":3040,"locale":1138,"meta":3049,"navigation":200,"path":1145,"platform":1141,"related":3050,"section":3054,"seo":3055,"severity":3056,"stem":3057,"summary":3058,"tags":3059,"twitterCreator":1092,"twitterSite":1092,"type":3063,"updatedAt":3004,"__hash__":3064},"content_ru/errors/linux/systemd-failed-to-start.md","systemd-failed-to-start: причины и методы исправления ошибки запуска",[2150,1329,1330,10,1332],"systemd 245+",{"type":13,"value":2152,"toc":2987},[2153,2160,2170,2176,2190,2194,2197,2267,2271,2277,2280,2356,2372,2376,2379,2497,2501,2606,2610,2613,2703,2707,2771,2773,2777,2780,2903,2907,2910,2984],[16,2154,2156,2157],{"id":2155},"что-означает-ошибка-systemd-failed-to-start","Что означает ошибка ",[36,2158,2159],{},"systemd-failed-to-start",[21,2161,2162,2163,2166,2167,2169],{},"Ошибка ",[24,2164,2165],{},"Failed to start"," — это общий статус, который systemd присваивает службе (юниту), когда процесс её запуска завершился с ненулевым кодом возврата, превысил заданный таймаут или столкнулся с критической проблемой при инициализации. В выводе команды ",[36,2168,1307],{}," она выглядит как:",[157,2171,2174],{"className":2172,"code":2173,"language":497},[495],"● some-service.service - Some Service Description\n   Loaded: loaded (/etc/systemd/system/some-service.service; enabled; vendor preset: enabled)\n   Active: **failed** (Result: exit-code) since Thu 2026-02-15 10:30:00 MSK; 1min 30s ago\n  Process: 1234 ExecStart=/usr/bin/some-service (code=exited, status=1/FAILURE)\n",[36,2175,2173],{"__ignoreMap":162},[21,2177,2178,2179,919,2182,2185,2186,2189],{},"Ключевые флаги: ",[36,2180,2181],{},"Active: failed",[36,2183,2184],{},"Result: exit-code"," (или ",[36,2187,2188],{},"timeout","). Эта ошибка блокирует работу сервиса и может помешать загрузке системы, если юнит критичен.",[16,2191,2193],{"id":2192},"причины-возникновения","Причины возникновения",[21,2195,2196],{},"Причины носят конкретный технический характер:",[76,2198,2199,2219,2231,2237,2248,2257],{},[48,2200,2201,1676,2204,2206,2207,2209,2210,131,2212,2215,2216,2218],{},[24,2202,2203],{},"Некорректный конфигурационный файл юнита",[36,2205,824],{},"). Ошибки в секциях ",[36,2208,459],{}," (неверный путь в ",[36,2211,1945],{},[36,2213,2214],{},"ExecStartPre","), ",[36,2217,1660],{}," или синтаксис.",[48,2220,2221,2224,2225,2228,2229,375],{},[24,2222,2223],{},"Недостаток прав доступа",". Служба пытается прочитать/записать в каталог, к которому у неё нет прав (например, ",[36,2226,2227],{},"/var/log/app/","), или запускается от неправильного пользователя (",[36,2230,1611],{},[48,2232,2233,2236],{},[24,2234,2235],{},"Конфликт ресурсов",". Порт уже занят другим процессом, недостаточно памяти (OOM Killer), не хватает дескрипторов файлов.",[48,2238,2239,2242,2243,825,2245,2247],{},[24,2240,2241],{},"Зависимости не выполнены",". Указанные в ",[36,2244,1579],{},[36,2246,1565],{}," службы не запустились или завершились с ошибкой.",[48,2249,2250,2253,2254,2256],{},[24,2251,2252],{},"Повреждение бинарного файла или зависимостей приложения",". Файл, указанный в ",[36,2255,1945],{},", отсутствует, неисправен или не может загрузить нужные библиотеки.",[48,2258,2259,2262,2263,2266],{},[24,2260,2261],{},"Превышение таймаута",". Приложение долго не отвечает на запросы инициализации, и systemd убивает его по истечении ",[36,2264,2265],{},"TimeoutStartSec="," (по умолчанию 90 сек).",[16,2268,2270],{"id":2269},"способы-решения","Способы решения",[809,2272,2274,2275],{"id":2273},"способ-1-анализ-логов-службы-через-journalctl","Способ 1: Анализ логов службы через ",[36,2276,1854],{},[21,2278,2279],{},"Это первый и самый важный шаг. Логи systemd содержат детальный вывод программы.",[76,2281,2282,2287,2314,2331],{},[48,2283,2284,2285,375],{},"Узнайте точное имя службы (например, ",[36,2286,141],{},[48,2288,2289,2290,2293,2294],{},"Выполните команду для просмотра логов ",[24,2291,2292],{},"за текущую загрузку",":\n",[157,2295,2297],{"className":159,"code":2296,"language":161,"meta":162,"style":162},"journalctl -u nginx.service -b --no-pager\n",[36,2298,2299],{"__ignoreMap":162},[166,2300,2301,2303,2305,2308,2311],{"class":168,"line":169},[166,2302,1854],{"class":179},[166,2304,1874],{"class":183},[166,2306,2307],{"class":230}," nginx.service",[166,2309,2310],{"class":183}," -b",[166,2312,2313],{"class":183}," --no-pager\n",[48,2315,2316,2317,131,2319,131,2322,131,2325,131,2328,88],{},"Внимательно изучите последние 20-30 строк. Ищите слова ",[24,2318,1845],{},[24,2320,2321],{},"Error",[24,2323,2324],{},"(code=exited, status=...)",[24,2326,2327],{},"Permission denied",[24,2329,2330],{},"No such file or directory",[48,2332,2333,2334],{},"Если лог обширный, фильтруйте по уровню ошибки:\n",[157,2335,2337],{"className":159,"code":2336,"language":161,"meta":162,"style":162},"journalctl -u nginx.service -b -p err --no-pager\n",[36,2338,2339],{"__ignoreMap":162},[166,2340,2341,2343,2345,2347,2349,2351,2354],{"class":168,"line":169},[166,2342,1854],{"class":179},[166,2344,1874],{"class":183},[166,2346,2307],{"class":230},[166,2348,2310],{"class":183},[166,2350,741],{"class":183},[166,2352,2353],{"class":230}," err",[166,2355,2313],{"class":183},[267,2357,2358],{},[21,2359,271,2360,2363,2364,2367,2368,2371],{},[24,2361,2362],{},"Совет",": Добавьте флаг ",[36,2365,2366],{},"-e"," для открытия лога сразу в конце, или ",[36,2369,2370],{},"-f"," для отслеживания в реальном времени при перезапуске службы.",[809,2373,2375],{"id":2374},"способ-2-проверка-и-исправление-конфигурационного-файла","Способ 2: Проверка и исправление конфигурационного файла",[21,2377,2378],{},"Ошибки в юнит-файле — частая причина.",[76,2380,2381,2409,2431,2482],{},[48,2382,2383,2384],{},"Найдите файл службы:\n",[157,2385,2387],{"className":159,"code":2386,"language":161,"meta":162,"style":162},"systemctl status nginx.service | grep Loaded\n# Вывод: Loaded: loaded (/etc/systemd/system/nginx.service; enabled; ...)\n",[36,2388,2389,2404],{"__ignoreMap":162},[166,2390,2391,2393,2395,2397,2399,2401],{"class":168,"line":169},[166,2392,180],{"class":179},[166,2394,650],{"class":230},[166,2396,2307],{"class":230},[166,2398,188],{"class":187},[166,2400,224],{"class":179},[166,2402,2403],{"class":230}," Loaded\n",[166,2405,2406],{"class":168,"line":176},[166,2407,2408],{"class":172},"# Вывод: Loaded: loaded (/etc/systemd/system/nginx.service; enabled; ...)\n",[48,2410,2411,2412,2430],{},"Проверьте синтаксис:\n",[157,2413,2415],{"className":159,"code":2414,"language":161,"meta":162,"style":162},"sudo systemd-analyze verify /etc/systemd/system/nginx.service\n",[36,2416,2417],{"__ignoreMap":162},[166,2418,2419,2421,2424,2427],{"class":168,"line":169},[166,2420,87],{"class":179},[166,2422,2423],{"class":230}," systemd-analyze",[166,2425,2426],{"class":230}," verify",[166,2428,2429],{"class":230}," /etc/systemd/system/nginx.service\n","\nКоманда покажет строку с ошибкой, если она есть (например, \"Invalid command 'Execstar', not part of a unit configuration\").",[48,2432,2433,2434,2437,2438],{},"Откройте файл в редакторе (",[36,2435,2436],{},"sudo nano /etc/systemd/system/nginx.service",") и проверьте:\n",[45,2439,2440,2454,2464,2475],{},[48,2441,2442,2443,131,2445,2447,2448,825,2451,1975],{},"Пути в ",[36,2444,1945],{},[36,2446,2214],{},": существуют ли они? (",[36,2449,2450],{},"which some-binary",[36,2452,2453],{},"ls -la /path/to/file",[48,2455,2456,2457,2460,2461,375],{},"Права на исполняемый файл (",[36,2458,2459],{},"ls -l /usr/bin/some-binary"," — должен быть ",[36,2462,2463],{},"-rwxr-xr-x",[48,2465,2466,2467,2469,2470,919,2472,2474],{},"Секцию ",[36,2468,459],{},": правильно ли указаны ",[36,2471,1611],{},[36,2473,1615],{},"? Существует ли такой пользователь/группа?",[48,2476,2477,2478,2481],{},"Директиву ",[36,2479,2480],{},"WorkingDirectory=",": существует ли каталог?",[48,2483,2484,2485],{},"После исправлений выполните:\n",[157,2486,2487],{"className":159,"code":381,"language":161,"meta":162,"style":162},[36,2488,2489],{"__ignoreMap":162},[166,2490,2491,2493,2495],{"class":168,"line":169},[166,2492,87],{"class":179},[166,2494,390],{"class":230},[166,2496,393],{"class":230},[809,2498,2500],{"id":2499},"способ-3-проверка-зависимостей-и-конфликтов-портовресурсов","Способ 3: Проверка зависимостей и конфликтов портов/ресурсов",[76,2502,2503,2535,2561],{},[48,2504,2505,2508,2509,2534],{},[24,2506,2507],{},"Проверьте, не занят ли порт"," (если служба сетевая):\n",[157,2510,2512],{"className":159,"code":2511,"language":161,"meta":162,"style":162},"sudo ss -tulpn | grep :80  # Замените 80 на порт вашей службы\n",[36,2513,2514],{"__ignoreMap":162},[166,2515,2516,2518,2521,2524,2526,2528,2531],{"class":168,"line":169},[166,2517,87],{"class":179},[166,2519,2520],{"class":230}," ss",[166,2522,2523],{"class":183}," -tulpn",[166,2525,188],{"class":187},[166,2527,224],{"class":179},[166,2529,2530],{"class":230}," :80",[166,2532,2533],{"class":172},"  # Замените 80 на порт вашей службы\n","\nЕсли порт занят другим процессом, найдите и остановите его или измените порт в конфиге службы.",[48,2536,2537,2293,2540,2557,2558,88],{},[24,2538,2539],{},"Проверьте, все ли требуемые службы работают",[157,2541,2543],{"className":159,"code":2542,"language":161,"meta":162,"style":162},"systemctl list-dependencies nginx.service --reverse\n",[36,2544,2545],{"__ignoreMap":162},[166,2546,2547,2549,2552,2554],{"class":168,"line":169},[166,2548,180],{"class":179},[166,2550,2551],{"class":230}," list-dependencies",[166,2553,2307],{"class":230},[166,2555,2556],{"class":183}," --reverse\n","\nЭто покажет, какие службы зависят от nginx. Убедитесь, что они в состоянии ",[36,2559,2560],{},"active (running)",[48,2562,2563,2293,2566,2605],{},[24,2564,2565],{},"Проверьте наличие свободных ресурсов",[157,2567,2569],{"className":159,"code":2568,"language":161,"meta":162,"style":162},"free -h        # Память\ndf -h /var     # Дисковое пространство (особенно для логов)\nulimit -n      # Лимит дескрипторов файлов (может быть мал)\n",[36,2570,2571,2582,2595],{"__ignoreMap":162},[166,2572,2573,2576,2579],{"class":168,"line":169},[166,2574,2575],{"class":179},"free",[166,2577,2578],{"class":183}," -h",[166,2580,2581],{"class":172},"        # Память\n",[166,2583,2584,2587,2589,2592],{"class":168,"line":176},[166,2585,2586],{"class":179},"df",[166,2588,2578],{"class":183},[166,2590,2591],{"class":230}," /var",[166,2593,2594],{"class":172},"     # Дисковое пространство (особенно для логов)\n",[166,2596,2597,2600,2602],{"class":168,"line":197},[166,2598,2599],{"class":183},"ulimit",[166,2601,695],{"class":183},[166,2603,2604],{"class":172},"      # Лимит дескрипторов файлов (может быть мал)\n","\nНедостаток любого ресурса может привести к падению службы при старте.",[809,2607,2609],{"id":2608},"способ-4-восстановление-из-пакета-или-ручная-переустановка","Способ 4: Восстановление из пакета или ручная переустановка",[21,2611,2612],{},"Если служба установлена из пакетного менеджера (apt, dnf, yum), её конфигурация могла быть повреждена.",[76,2614,2615,2661,2684],{},[48,2616,2617,2293,2620,2653,2654,2657,2658,88],{},[24,2618,2619],{},"Debian/Ubuntu",[157,2621,2623],{"className":159,"code":2622,"language":161,"meta":162,"style":162},"sudo apt update\nsudo apt install --reinstall nginx  # Замените nginx на имя пакета\n",[36,2624,2625,2635],{"__ignoreMap":162},[166,2626,2627,2629,2632],{"class":168,"line":169},[166,2628,87],{"class":179},[166,2630,2631],{"class":230}," apt",[166,2633,2634],{"class":230}," update\n",[166,2636,2637,2639,2641,2644,2647,2650],{"class":168,"line":176},[166,2638,87],{"class":179},[166,2640,2631],{"class":230},[166,2642,2643],{"class":230}," install",[166,2645,2646],{"class":183}," --reinstall",[166,2648,2649],{"class":230}," nginx",[166,2651,2652],{"class":172},"  # Замените nginx на имя пакета\n","\nЭто восстановит файлы из ",[36,2655,2656],{},"/usr/share/doc/nginx/examples/"," или оригинальные конфиги в ",[36,2659,2660],{},"/etc/",[48,2662,2663,2293,2666],{},[24,2664,2665],{},"RHEL/CentOS/Fedora",[157,2667,2669],{"className":159,"code":2668,"language":161,"meta":162,"style":162},"sudo dnf reinstall nginx\n",[36,2670,2671],{"__ignoreMap":162},[166,2672,2673,2675,2678,2681],{"class":168,"line":169},[166,2674,87],{"class":179},[166,2676,2677],{"class":230}," dnf",[166,2679,2680],{"class":230}," reinstall",[166,2682,2683],{"class":230}," nginx\n",[48,2685,2686,2687,2690,2691,2694,2695,2698,2699,2702],{},"После переустановки ",[24,2688,2689],{},"не перезаписывайте"," свои кастомные настройки в ",[36,2692,2693],{},"/etc/nginx/nginx.conf"," (если они были), если пакетный менеджер спросит. Сравните старый и новый файлы конфигурации юнита (",[36,2696,2697],{},"/lib/systemd/system/nginx.service"," vs ",[36,2700,2701],{},"/etc/systemd/system/nginx.service","). Часто правильнее скопировать свои правки в новый оригинальный файл, а не использовать старый повреждённый.",[16,2704,2706],{"id":2705},"профилактика","Профилактика",[45,2708,2709,2719,2734,2745,2761],{},[48,2710,2711,2714,2715,2718],{},[24,2712,2713],{},"Всегда проверяйте синтаксис"," конфигурационных файлов службы и самого приложения (например, ",[36,2716,2717],{},"nginx -t",") перед перезагрузкой systemd.",[48,2720,2721,2725,2726,2729,2730,825,2732,88],{},[24,2722,1301,2723],{},[36,2724,1180],{}," после ",[61,2727,2728],{},"любого"," изменения файла юнита в ",[36,2731,1394],{},[36,2733,1444],{},[48,2735,2736,1676,2739,131,2741,2744],{},[24,2737,2738],{},"Настраивайте разумные таймауты",[36,2740,2265],{},[36,2742,2743],{},"TimeoutStopSec=",") для долгих служб, чтобы избежать ложных срабатываний.",[48,2746,2747,2750,2751,131,2754,131,2757,2760],{},[24,2748,2749],{},"Следите за правами"," на каталоги, с которыми работает служба (",[36,2752,2753],{},"/var/log/",[36,2755,2756],{},"/var/lib/",[36,2758,2759],{},"/run/","). Рекомендуется создавать отдельного пользователя/группу для каждой службы.",[48,2762,2763,2766,2767,2770],{},[24,2764,2765],{},"Периодически проверяйте логи"," на предмет предупреждений (",[36,2768,2769],{},"journalctl -u \u003Cслужба>.service -p warning",") до того, как они превратятся в ошибки.",[949,2772],{},[809,2774,2776],{"id":2775},"способ-n-откат-к-предыдущей-рабочей-конфигурации-если-используется-git","Способ N: Откат к предыдущей рабочей конфигурации (если используется Git)",[21,2778,2779],{},"Если конфигурационные файлы службы находятся под контролем версий (что хорошая практика):",[76,2781,2782,2815,2848,2900],{},[48,2783,2784,2785],{},"Определите, когда служба последний раз работала:\n",[157,2786,2788],{"className":159,"code":2787,"language":161,"meta":162,"style":162},"sudo journalctl -u nginx.service -b --no-pager | grep -i \"started\\|failed\"\n",[36,2789,2790],{"__ignoreMap":162},[166,2791,2792,2794,2796,2798,2800,2802,2805,2807,2809,2812],{"class":168,"line":169},[166,2793,87],{"class":179},[166,2795,1871],{"class":230},[166,2797,1874],{"class":183},[166,2799,2307],{"class":230},[166,2801,2310],{"class":183},[166,2803,2804],{"class":183}," --no-pager",[166,2806,188],{"class":187},[166,2808,224],{"class":179},[166,2810,2811],{"class":183}," -i",[166,2813,2814],{"class":230}," \"started\\|failed\"\n",[48,2816,2817,2818],{},"Найдите коммит, после которого начались сбои:\n",[157,2819,2821],{"className":159,"code":2820,"language":161,"meta":162,"style":162},"cd /etc/systemd/system/\ngit log --oneline -p -- nginx.service\n",[36,2822,2823,2829],{"__ignoreMap":162},[166,2824,2825,2827],{"class":168,"line":169},[166,2826,726],{"class":183},[166,2828,1415],{"class":230},[166,2830,2831,2834,2837,2840,2842,2845],{"class":168,"line":176},[166,2832,2833],{"class":179},"git",[166,2835,2836],{"class":230}," log",[166,2838,2839],{"class":183}," --oneline",[166,2841,741],{"class":183},[166,2843,2844],{"class":183}," --",[166,2846,2847],{"class":230}," nginx.service\n",[48,2849,2850,2851],{},"Временно верните предыдущую версию файла:\n",[157,2852,2854],{"className":159,"code":2853,"language":161,"meta":162,"style":162},"sudo git checkout \u003Cхэш_коммита> -- nginx.service\nsudo systemctl daemon-reload\nsudo systemctl restart nginx.service\n",[36,2855,2856,2882,2890],{"__ignoreMap":162},[166,2857,2858,2860,2863,2866,2869,2872,2875,2878,2880],{"class":168,"line":169},[166,2859,87],{"class":179},[166,2861,2862],{"class":230}," git",[166,2864,2865],{"class":230}," checkout",[166,2867,2868],{"class":187}," \u003C",[166,2870,2871],{"class":230},"хэш_коммит",[166,2873,2874],{"class":732},"а",[166,2876,2877],{"class":187},">",[166,2879,2844],{"class":183},[166,2881,2847],{"class":230},[166,2883,2884,2886,2888],{"class":168,"line":176},[166,2885,87],{"class":179},[166,2887,390],{"class":230},[166,2889,393],{"class":230},[166,2891,2892,2894,2896,2898],{"class":168,"line":197},[166,2893,87],{"class":179},[166,2895,390],{"class":230},[166,2897,539],{"class":230},[166,2899,2847],{"class":230},[48,2901,2902],{},"Если это помогло, проанализируйте, какие именно изменения сломали службу, и внесите их более аккуратно.",[809,2904,2906],{"id":2905},"способ-n1-запуск-службы-вручную-для-отладки","Способ N+1: Запуск службы вручную для отладки",[21,2908,2909],{},"Иногда systemd \"затыкает\" вывод ошибки. Запустите исполняемый файл напрямую от того же пользователя, под которым работает служба.",[76,2911,2912,2918],{},[48,2913,2914,2915,2917],{},"Узнайте пользователя из юнит-файла (",[36,2916,1611],{},") или из лога.",[48,2919,2920,2921,2976,2977,825,2980,2983],{},"Выполните:\n",[157,2922,2924],{"className":159,"code":2923,"language":161,"meta":162,"style":162},"sudo -u \u003Cпользователь> /usr/bin/some-service --verbose\n# или, если служба запускает скрипт:\nsudo -u \u003Cпользователь> /bin/bash -x /path/to/startup-script.sh\n",[36,2925,2926,2948,2953],{"__ignoreMap":162},[166,2927,2928,2930,2932,2934,2937,2940,2942,2945],{"class":168,"line":169},[166,2929,87],{"class":179},[166,2931,1874],{"class":183},[166,2933,2868],{"class":187},[166,2935,2936],{"class":230},"пользовател",[166,2938,2939],{"class":732},"ь",[166,2941,2877],{"class":187},[166,2943,2944],{"class":230}," /usr/bin/some-service",[166,2946,2947],{"class":183}," --verbose\n",[166,2949,2950],{"class":168,"line":176},[166,2951,2952],{"class":172},"# или, если служба запускает скрипт:\n",[166,2954,2955,2957,2959,2961,2963,2965,2967,2970,2973],{"class":168,"line":197},[166,2956,87],{"class":179},[166,2958,1874],{"class":183},[166,2960,2868],{"class":187},[166,2962,2936],{"class":230},[166,2964,2939],{"class":732},[166,2966,2877],{"class":187},[166,2968,2969],{"class":230}," /bin/bash",[166,2971,2972],{"class":183}," -x",[166,2974,2975],{"class":230}," /path/to/startup-script.sh\n","\nФлаги ",[36,2978,2979],{},"--verbose",[36,2981,2982],{},"-x"," (для bash) дадут подробный вывод. Часто ошибка становится очевидной при прямом запуске.",[1068,2985,2986],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":162,"searchDepth":176,"depth":176,"links":2988},[2989,2991,2992,2999],{"id":2155,"depth":176,"text":2990},"Что означает ошибка systemd-failed-to-start",{"id":2192,"depth":176,"text":2193},{"id":2269,"depth":176,"text":2270,"children":2993},[2994,2996,2997,2998],{"id":2273,"depth":197,"text":2995},"Способ 1: Анализ логов службы через journalctl",{"id":2374,"depth":197,"text":2375},{"id":2499,"depth":197,"text":2500},{"id":2608,"depth":197,"text":2609},{"id":2705,"depth":176,"text":2706,"children":3000},[3001,3002],{"id":2775,"depth":197,"text":2776},{"id":2905,"depth":197,"text":2906},"systemd-failed","2026-02-15 16:38:58","Ошибка Failed to start в systemd мешает работе сервисов. Узнайте, как быстро диагностировать проблему через journalctl и исправить её проверенными способами. Пошаговая инструкция.","15-30 минут",[3008,3011,3014,3017],{"question":3009,"answer":3010},"Что означает ошибка 'Failed to start' в выводе systemctl?","Эта ошибка означает, что systemd не смог успешно запустить указанную службу (юнит). Причина может быть в самой службе, её конфигурации, зависимостях или конфликте ресурсов.",{"question":3012,"answer":3013},"Где искать подробную информацию о причине сбоя systemd?","Используйте команду `journalctl -u \u003Cимя_службы>.service --no-pager -b`, чтобы увидеть логи конкретной службы за текущую загрузку. Ключевые слова 'Failed', 'Error', 'exit code' укажут на проблему.",{"question":3015,"answer":3016},"Может ли ошибка 'Failed to start' быть вызвана недостатком прав?","Да, часто. Если служба запускается от неправильного пользователя (например, root, а должна от nginx) или в конфиге указан недоступный путь, systemd не сможет её запустить.",{"question":3018,"answer":3019},"Как временно обойти проблему, чтобы система загрузилась?","Можно отключить problematic юнит на загрузку командой `sudo systemctl disable \u003Cслужба>.service` или запустить систему в режиме восстановления, чтобы исправить конфигурацию.",[3021,3024,3027,3030,3033,3036],{"name":3022,"text":3023},"Проверьте точное состояние службы и код ошибки","Выполните `systemctl status \u003Cслужба>.service`. В разделе 'Active:' и последних строках лога будет указан код ошибки (например, 'exit-code' или 'timeout'). Запишите его.",{"name":3025,"text":3026},"Изучите полные логи службы через journalctl","Используйте `journalctl -u \u003Cслужба>.service -b --no-pager`. Прокрутите лог до конца и найдите строки с 'Failed', 'error', 'Permission denied', 'No such file'. Это ключ к причине.",{"name":3028,"text":3029},"Проверьте конфигурационный файл юнита на синтаксис","Выполните `systemd-analyze verify /etc/systemd/system/\u003Cслужба>.service` (или путь к вашему файлу). Команда проверит синтаксис и укажет на ошибки в секциях [Service], [Install].",{"name":3031,"text":3032},"Восстановите или переустановите проблемный пакет (если применимо)","Если служба относится к пакету (например, nginx, postgresql), попробуйте `sudo apt reinstall \u003Cпакет>` (Debian/Ubuntu) или `sudo dnf reinstall \u003Cпакет>` (RHEL/Fedora). Это восстановит оригинальные файлы конфигурации.",{"name":3034,"text":3035},"Вручную исправьте найденную проблему","В зависимости от логов: исправьте путь в `ExecStart`, права на файлы (`chmod`, `chown`), разрешите конфликт портов, добавьте недостающие зависимости (`Requires=`, `After=`) в конфиг юнита.",{"name":3037,"text":3038},"Перезапустите и включите службу","После исправлений выполните `sudo systemctl daemon-reload`, затем `sudo systemctl restart \u003Cслужба>.service` и `sudo systemctl enable \u003Cслужба>.service`. Проверьте статус снова.","PT20M",[3041,3042,3043,3044,3045,3046,3047,3048],"systemd failed to start","ошибка systemd юнит не запустился","failed to start служба systemd","как исправить systemd ошибка запуска","journalctl ошибка юнита","systemctl status failed","systemd dependency failed","восстановление systemd службы",{},[3051,3052,3053],"/errors/linux/systemd-unit-not-found","/errors/linux/systemd-circular-dependency","/guides/linux/systemd-service-creation","Ошибки Linux",{"title":2148,"description":3005},"high","errors/linux/systemd-failed-to-start","Статья подробно разбирает ошибку 'Failed to start' в systemd, её основные причины и 4 проверенных способа решения. Вы научитесь анализировать логи и восстанавливать работу служб.",[3060,94,180,1152,1854,3061,3062],"ошибки linux","service","boot","error","eIns-0UfD2cGVn2HufRiXZrk1AiyCuiXxeXglmXIzm0"]