[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/process-management-basics":3,"mdc--bcfqka-key":1696,"mdc-sgl5um-key":1720,"mdc--x0kreq-key":1744,"mdc--ctixry-key":1767,"mdc-fmi5rt-key":1775,"mdc--8f8qzm-key":1818,"mdc-l1afyh-key":1867,"mdc--glyjb1-key":1904,"mdc-nkhkxv-key":1929,"mdc--9fuhqz-key":1986,"related-/guides/linux/systemd-service-creation,/guides/linux/log-analysis-basics,/errors/linux/process-zombie":2017},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":1628,"code":1628,"createdAt":1629,"description":1630,"difficulty":1631,"draft":1632,"estimatedTime":1633,"extension":1634,"faq":1635,"howToSteps":1648,"howToTotalTime":1667,"image":1628,"keywords":1668,"locale":1677,"meta":1678,"navigation":1011,"path":1679,"platform":1680,"related":1681,"section":1685,"seo":1686,"severity":1628,"stem":1687,"summary":1688,"tags":1689,"twitterCreator":1628,"twitterSite":1628,"type":1694,"updatedAt":1629,"__hash__":1695},"content_ru/guides/linux/process-management-basics.md","Управление процессами в Linux: от базовых команд до systemd",[7,8,9,10],"Ubuntu 22.04+","Debian 11+","CentOS Stream/RHEL 8+","Linux с systemd","FixPedia Team",{"type":13,"value":14,"toc":1591},"minimark",[15,20,24,40,56,60,68,73,79,107,110,140,158,182,195,231,251,261,266,274,318,334,338,341,345,348,376,395,417,423,427,434,448,452,455,468,477,481,485,492,606,620,624,699,703,706,805,818,822,826,833,858,861,865,899,903,912,971,975,980,984,1165,1169,1257,1260,1264,1271,1281,1341,1352,1358,1361,1427,1437,1440,1475,1493,1497,1580,1587],[16,17,19],"h2",{"id":18},"введение-зачем-управлять-процессами","Введение: зачем управлять процессами?",[21,22,23],"p",{},"Каждая запущенная программа в Linux — это процесс. Управление ими — одна из ключевых задач системного администратора и разработчика. Нужно ли вам:",[25,26,27,31,34,37],"ul",{},[28,29,30],"li",{},"Найти и завершить \"зависший\" процесс, который съедает всю память?",[28,32,33],{},"Узнать, какой именно процесс слушает сетевой порт?",[28,35,36],{},"Запустить задачу в фоне, чтобы закрыть терминал?",[28,38,39],{},"Настроить автозапуск важного сервиса?",[21,41,42,43,47,48,51,52,55],{},"Этот гайд покрывает всё — от базовых команд ",[44,45,46],"code",{},"ps"," и ",[44,49,50],{},"kill"," до современного менеджера системных сервисов ",[44,53,54],{},"systemd",". Вы получите практические навыки, которые пригодятся ежедневно.",[16,57,59],{"id":58},"базовый-мониторинг-ps-top-и-htop","Базовый мониторинг: ps, top и htop",[61,62,64,65,67],"h3",{"id":63},"команда-ps-снимок-процессов","Команда ",[44,66,46],{}," — снимок процессов",[21,69,70,72],{},[44,71,46],{}," (process status) показывает статический список процессов на момент запуска команды.",[21,74,75],{},[76,77,78],"strong",{},"Самые полезные варианты:",[80,81,86],"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-bash shiki shiki-themes github-light github-dark","# Показать все процессы всех пользователей в \"полном\" формате (BSD-стиль)\nps aux\n","bash","",[44,87,88,97],{"__ignoreMap":85},[89,90,93],"span",{"class":91,"line":92},"line",1,[89,94,96],{"class":95},"sJ8bj","# Показать все процессы всех пользователей в \"полном\" формате (BSD-стиль)\n",[89,98,100,103],{"class":91,"line":99},2,[89,101,46],{"class":102},"sScJk",[89,104,106],{"class":105},"sZZnC"," aux\n",[21,108,109],{},"Ключевые столбцы:",[25,111,112,118,124,134],{},[28,113,114,117],{},[44,115,116],{},"USER"," — владелец процесса.",[28,119,120,123],{},[44,121,122],{},"PID"," — уникальный идентификатор процесса (главное, что нужно для управления).",[28,125,126,129,130,133],{},[44,127,128],{},"%CPU",", ",[44,131,132],{},"%MEM"," — потребление процессорного времени и памяти.",[28,135,136,139],{},[44,137,138],{},"COMMAND"," — команда, запустившая процесс.",[80,141,143],{"className":82,"code":142,"language":84,"meta":85,"style":85},"# Альтернативный, более детальный формат (POSIX-стиль)\nps -ef\n",[44,144,145,150],{"__ignoreMap":85},[89,146,147],{"class":91,"line":92},[89,148,149],{"class":95},"# Альтернативный, более детальный формат (POSIX-стиль)\n",[89,151,152,154],{"class":91,"line":99},[89,153,46],{"class":102},[89,155,157],{"class":156},"sj4cs"," -ef\n",[21,159,160,161,129,164,129,166,169,170,173,174,177,178,181],{},"Здесь столбцы: ",[44,162,163],{},"UID",[44,165,122],{},[44,167,168],{},"PPID"," (PID родителя), ",[44,171,172],{},"C"," (коэффициент использования CPU), ",[44,175,176],{},"STIME"," (время запуска), ",[44,179,180],{},"CMD",".",[21,183,184,187,188,190,191,194],{},[76,185,186],{},"Фильтрация:"," Всегда комбинируйте ",[44,189,46],{}," с ",[44,192,193],{},"grep"," для поиска.",[80,196,198],{"className":82,"code":197,"language":84,"meta":85,"style":85},"ps aux | grep nginx\nps -ef | grep python3\n",[44,199,200,217],{"__ignoreMap":85},[89,201,202,204,207,211,214],{"class":91,"line":92},[89,203,46],{"class":102},[89,205,206],{"class":105}," aux",[89,208,210],{"class":209},"szBVR"," |",[89,212,213],{"class":102}," grep",[89,215,216],{"class":105}," nginx\n",[89,218,219,221,224,226,228],{"class":91,"line":99},[89,220,46],{"class":102},[89,222,223],{"class":156}," -ef",[89,225,210],{"class":209},[89,227,213],{"class":102},[89,229,230],{"class":105}," python3\n",[232,233,234],"blockquote",{},[21,235,236,237,240,241,243,244,247,248,181],{},"⚠️ ",[76,238,239],{},"Важно:"," ",[44,242,193],{}," сам появится в выводе. Используйте ",[44,245,246],{},"pgrep"," для чистого поиска по имени: ",[44,249,250],{},"pgrep -l nginx",[61,252,254,47,257,260],{"id":253},"top-и-htop-интерактивный-мониторинг",[44,255,256],{},"top",[44,258,259],{},"htop"," — интерактивный мониторинг",[21,262,263,265],{},[44,264,256],{}," — классическая утилита, которая обновляет список процессов в реальном времени (по умолчанию каждые 3 секунды).",[21,267,268],{},[76,269,270,271,273],{},"Основные клавиши в ",[44,272,256],{},":",[25,275,276,282,288,294,300,306,312],{},[28,277,278,281],{},[44,279,280],{},"P"," — сортировка по загрузке CPU (по умолчанию).",[28,283,284,287],{},[44,285,286],{},"M"," — сортировка по использованию памяти.",[28,289,290,293],{},[44,291,292],{},"N"," — сортировка по PID.",[28,295,296,299],{},[44,297,298],{},"k"," — убить процесс (запросит PID и сигнал).",[28,301,302,305],{},[44,303,304],{},"r"," — изменить приоритет (renice) процесса.",[28,307,308,311],{},[44,309,310],{},"u"," — показать процессы только указанного пользователя.",[28,313,314,317],{},[44,315,316],{},"q"," — выйти.",[21,319,320,322,323,325,326,329,330,333],{},[44,321,259],{}," — более удобная и наглядная цветовая альтернатива ",[44,324,256],{},". Она часто не установлена по умолчанию, но её стоит установить (",[44,327,328],{},"sudo apt install htop"," / ",[44,331,332],{},"sudo yum install htop","). Позволяет управлять процессами прямо из интерфейса (F9 для kill, F5 для дерева, F6 для сортировки).",[16,335,337],{"id":336},"поиск-процессов-не-только-по-имени","Поиск процессов: не только по имени",[21,339,340],{},"Иногда нужно найти процесс не по его имени, а по другим признакам.",[61,342,344],{"id":343},"по-открытому-порту-или-сокету","По открытому порту или сокету",[21,346,347],{},"Частая задача: \"Кто слушает порт 80?\".",[80,349,351],{"className":82,"code":350,"language":84,"meta":85,"style":85},"# Рекомендуемый современный способ (из пакета iproute2)\nsudo ss -tulpn | grep :80\n",[44,352,353,358],{"__ignoreMap":85},[89,354,355],{"class":91,"line":92},[89,356,357],{"class":95},"# Рекомендуемый современный способ (из пакета iproute2)\n",[89,359,360,363,366,369,371,373],{"class":91,"line":99},[89,361,362],{"class":102},"sudo",[89,364,365],{"class":105}," ss",[89,367,368],{"class":156}," -tulpn",[89,370,210],{"class":209},[89,372,213],{"class":102},[89,374,375],{"class":105}," :80\n",[21,377,378,379,382,383,386,387,390,391,394],{},"Опции: ",[44,380,381],{},"-t"," (TCP), ",[44,384,385],{},"-u"," (UDP), ",[44,388,389],{},"-l"," (только слушающие), ",[44,392,393],{},"-p"," (показать процесс/программу).",[80,396,398],{"className":82,"code":397,"language":84,"meta":85,"style":85},"# Классический способ (из пакета net-tools)\nsudo lsof -i :80\n",[44,399,400,405],{"__ignoreMap":85},[89,401,402],{"class":91,"line":92},[89,403,404],{"class":95},"# Классический способ (из пакета net-tools)\n",[89,406,407,409,412,415],{"class":91,"line":99},[89,408,362],{"class":102},[89,410,411],{"class":105}," lsof",[89,413,414],{"class":156}," -i",[89,416,375],{"class":105},[21,418,419,422],{},[44,420,421],{},"lsof"," (list open files) показывает все открытые файлы, включая сетевые сокеты. Очень мощный инструмент.",[61,424,426],{"id":425},"по-файлу-или-каталогу","По файлу или каталогу",[21,428,429,430,433],{},"Какой процесс держит открытым файл ",[44,431,432],{},"/var/log/app.log"," и мешает его удалить?",[80,435,437],{"className":82,"code":436,"language":84,"meta":85,"style":85},"sudo lsof /var/log/app.log\n",[44,438,439],{"__ignoreMap":85},[89,440,441,443,445],{"class":91,"line":92},[89,442,362],{"class":102},[89,444,411],{"class":105},[89,446,447],{"class":105}," /var/log/app.log\n",[61,449,451],{"id":450},"по-дереву-процессов","По дереву процессов",[21,453,454],{},"Чтобы увидеть иерархию (родительские и дочерние процессы), используйте:",[80,456,458],{"className":82,"code":457,"language":84,"meta":85,"style":85},"pstree -p\n",[44,459,460],{"__ignoreMap":85},[89,461,462,465],{"class":91,"line":92},[89,463,464],{"class":102},"pstree",[89,466,467],{"class":156}," -p\n",[21,469,470,471,473,474,181],{},"Или в ",[44,472,259],{}," нажмите ",[44,475,476],{},"F5",[16,478,480],{"id":479},"завершение-процессов-kill-killall-pkill","Завершение процессов: kill, killall, pkill",[61,482,484],{"id":483},"сигналы-язык-общения-с-процессами","Сигналы: язык общения с процессами",[21,486,487,488,491],{},"Завершение — это не просто \"выстрел\". Это отправка ",[76,489,490],{},"сигнала"," — короткого сообщения процессу. Основные:",[493,494,495,515],"table",{},[496,497,498],"thead",{},[499,500,501,506,509,512],"tr",{},[502,503,505],"th",{"align":504},"left","Сигнал",[502,507,508],{"align":504},"Номер",[502,510,511],{"align":504},"Действие (по умолчанию)",[502,513,514],{"align":504},"Как использовать",[516,517,518,541,566,588],"tbody",{},[499,519,520,526,529,535],{},[521,522,523],"td",{"align":504},[44,524,525],{},"SIGTERM",[521,527,528],{"align":504},"15",[521,530,531,534],{"align":504},[76,532,533],{},"Вежливое завершение."," Процесс может обработать сигнал, сохранить состояние и корректно закрыться.",[521,536,537,540],{"align":504},[44,538,539],{},"kill \u003CPID>"," (этот сигнал отправляется по умолч.)",[499,542,543,548,551,557],{},[521,544,545],{"align":504},[44,546,547],{},"SIGKILL",[521,549,550],{"align":504},"9",[521,552,553,556],{"align":504},[76,554,555],{},"Немедленное принудительное завершение."," Обработчик сигнала игнорируется. Процесс не может сохранить данные.",[521,558,559,562,563],{"align":504},[44,560,561],{},"kill -9 \u003CPID>"," или ",[44,564,565],{},"kill -KILL \u003CPID>",[499,567,568,573,576,583],{},[521,569,570],{"align":504},[44,571,572],{},"SIGINT",[521,574,575],{"align":504},"2",[521,577,578,579,582],{"align":504},"Прерывание (как ",[44,580,581],{},"Ctrl+C"," в терминале).",[521,584,585],{"align":504},[44,586,587],{},"kill -2 \u003CPID>",[499,589,590,595,598,601],{},[521,591,592],{"align":504},[44,593,594],{},"SIGHUP",[521,596,597],{"align":504},"1",[521,599,600],{"align":504},"\"Перезагрузка\". Часто используется для перечитывания конфигурационных файлов без полного перезапуска.",[521,602,603],{"align":504},[44,604,605],{},"kill -HUP \u003CPID>",[21,607,608,611,612,614,615,617,618,181],{},[76,609,610],{},"Правило:"," Сначала пробуйте ",[44,613,525],{}," (просто ",[44,616,50],{},"). Если процесс не реагирует (виснет), используйте ",[44,619,547],{},[61,621,623],{"id":622},"инструменты","Инструменты",[25,625,626,636,652,672,684],{},[28,627,628,632,633,635],{},[76,629,630],{},[44,631,539],{}," — отправить ",[44,634,525],{}," конкретному PID.",[28,637,638,562,643,648,649,181],{},[76,639,640],{},[44,641,642],{},"kill -s SIGNAL \u003CPID>",[76,644,645],{},[44,646,647],{},"kill -SIGNAL \u003CPID>"," — отправить конкретный сигнал. Пример: ",[44,650,651],{},"kill -HUP 1234",[28,653,654,659,660,663,664,667,668,671],{},[76,655,656],{},[44,657,658],{},"killall \u003Cимя_процесса>"," — завершить ",[76,661,662],{},"все"," процессы с указанным именем. ",[44,665,666],{},"killall nginx",". ",[76,669,670],{},"Осторожно!"," Убедитесь, что убиваете то, что нужно.",[28,673,674,679,680,683],{},[76,675,676],{},[44,677,678],{},"pkill \u003Cпаттерн>"," — завершить процессы, соответствующие шаблону (по имени, пользователю и т.д.). ",[44,681,682],{},"pkill -f \"python3 script.py\""," (ищет в полной командной строке). Мощный, но требует аккуратности.",[28,685,686,691,692,695,696,181],{},[76,687,688],{},[44,689,690],{},"pgrep \u003Cпаттерн>"," — ",[76,693,694],{},"только найти"," PID по шаблону. Идеально для комбинации: ",[44,697,698],{},"kill $(pgrep -f \"python3 script.py\")",[16,700,702],{"id":701},"управление-приоритетами-nice-и-renice","Управление приоритетами: nice и renice",[21,704,705],{},"Linux планировщик распределяет время CPU между процессами. Приоритет можно влиять.",[25,707,708,767],{},[28,709,710,715,716,719,720],{},[76,711,712],{},[44,713,714],{},"nice"," — запускает процесс с заданным ",[76,717,718],{},"статическим"," приоритетом.",[25,721,722,736,757],{},[28,723,724,725,728,729,731,732,735],{},"Диапазон: от ",[44,726,727],{},"-20"," (наивысший приоритет, требует ",[44,730,362],{},") до ",[44,733,734],{},"+19"," (наинизший).",[28,737,738,739],{},"Пример запуска с низким приоритетом (чтобы не мешал другим задачам):\n",[80,740,742],{"className":82,"code":741,"language":84,"meta":85,"style":85},"nice -n 19 ./долгая_расчётная_задача.sh\n",[44,743,744],{"__ignoreMap":85},[89,745,746,748,751,754],{"class":91,"line":92},[89,747,714],{"class":102},[89,749,750],{"class":156}," -n",[89,752,753],{"class":156}," 19",[89,755,756],{"class":105}," ./долгая_расчётная_задача.sh\n",[28,758,759,760,763,764,181],{},"Если не указать ",[44,761,762],{},"-n",", по умолчанию используется ",[44,765,766],{},"+10",[28,768,769,774,775,778,779],{},[76,770,771],{},[44,772,773],{},"renice"," — меняет приоритет ",[76,776,777],{},"уже запущенного"," процесса.",[80,780,782],{"className":82,"code":781,"language":84,"meta":85,"style":85},"# Повысить приоритет (уменьшить значение nice) для PID 5678\nsudo renice -5 -p 5678\n",[44,783,784,789],{"__ignoreMap":85},[89,785,786],{"class":91,"line":92},[89,787,788],{"class":95},"# Повысить приоритет (уменьшить значение nice) для PID 5678\n",[89,790,791,793,796,799,802],{"class":91,"line":99},[89,792,362],{"class":102},[89,794,795],{"class":105}," renice",[89,797,798],{"class":156}," -5",[89,800,801],{"class":156}," -p",[89,803,804],{"class":156}," 5678\n",[232,806,807],{},[21,808,809,810,813,814,817],{},"💡 ",[76,811,812],{},"Совет:"," Не повышайте (",[44,815,816],{},"nice \u003C 0",") приоритет важных системных процессов без необходимости. Это может привести к \"голоданию\" других задач.",[16,819,821],{"id":820},"фоновые-процессы-и-управление-заданиями","Фоновые процессы и управление заданиями",[61,823,825],{"id":824},"простое-фоновое-выполнение","Простое фоновое выполнение",[21,827,828,829,832],{},"Добавьте ",[44,830,831],{},"&"," в конец команды:",[80,834,836],{"className":82,"code":835,"language":84,"meta":85,"style":85},"long_running_command &\n[1] 2345  # [1] - номер задания, 2345 - PID\n",[44,837,838,847],{"__ignoreMap":85},[89,839,840,843],{"class":91,"line":92},[89,841,842],{"class":102},"long_running_command",[89,844,846],{"class":845},"sVt8B"," &\n",[89,848,849,852,855],{"class":91,"line":99},[89,850,851],{"class":845},"[1] ",[89,853,854],{"class":102},"2345",[89,856,857],{"class":95},"  # [1] - номер задания, 2345 - PID\n",[21,859,860],{},"Команда вернёт управление терминалу сразу.",[61,862,864],{"id":863},"управление-заданиями-job-control","Управление заданиями (job control)",[25,866,867,875,883,891],{},[28,868,869,874],{},[76,870,871],{},[44,872,873],{},"jobs"," — показать список фоновых заданий текущей оболочки.",[28,876,877,882],{},[76,878,879],{},[44,880,881],{},"fg %1"," — вернуть задание №1 на передний план (foreground).",[28,884,885,890],{},[76,886,887],{},[44,888,889],{},"bg %1"," — возобновить остановленное задание №1 в фоне (background).",[28,892,893,898],{},[76,894,895],{},[44,896,897],{},"Ctrl+Z"," — приостановить (stop) текущий foreground-процесс (не завершает!).",[61,900,902],{"id":901},"независимость-от-терминала-nohup-и-disown","Независимость от терминала: nohup и disown",[21,904,905,906,908,909,911],{},"По умолчанию фоновый процесс (",[44,907,831],{},") всё равно \"привязан\" к терминалу. Если терминал закроется (например, разорвётся SSH-соединение), процесс получит сигнал ",[44,910,594],{}," и, скорее всего, завершится.",[25,913,914,952],{},[28,915,916,921,922,924,925,948,949,181],{},[76,917,918],{},[44,919,920],{},"nohup"," (no hang up) — запускает процесс, игнорирующий сигнал ",[44,923,594],{},".\n",[80,926,928],{"className":82,"code":927,"language":84,"meta":85,"style":85},"nohup ./my_server.py > server.log 2>&1 &\n",[44,929,930],{"__ignoreMap":85},[89,931,932,934,937,940,943,946],{"class":91,"line":92},[89,933,920],{"class":102},[89,935,936],{"class":105}," ./my_server.py",[89,938,939],{"class":209}," >",[89,941,942],{"class":105}," server.log",[89,944,945],{"class":209}," 2>&1",[89,947,846],{"class":845},"\nВывод перенаправляется в файл ",[44,950,951],{},"server.log",[28,953,954,959,960,963,964,967,968,970],{},[76,955,956],{},[44,957,958],{},"disown"," — после запуска процесса в фоне (",[44,961,962],{},"command &",") можно \"отсоединить\" его от текущей оболочки: ",[44,965,966],{},"disown %1",". После этого процесс не будет получать ",[44,969,594],{}," при закрытии терминала.",[16,972,974],{"id":973},"современный-подход-systemd-и-systemctl","Современный подход: systemd и systemctl",[21,976,977,978,181],{},"Для долгоживущих системных сервисов (веб-серверы, базы данных, демоны) в современных дистрибутивах (Ubuntu 15.04+, CentOS 7+, Debian 8+) используется ",[76,979,54],{},[61,981,983],{"id":982},"основные-команды-systemctl","Основные команды systemctl",[80,985,987],{"className":82,"code":986,"language":84,"meta":85,"style":85},"# Статус сервиса (запущен ли, PID, последние логи)\nsudo systemctl status nginx\n\n# Запуск/остановка/перезапуск\nsudo systemctl start nginx\nsudo systemctl stop nginx\nsudo systemctl restart nginx   # мягкий перезапуск (может отключить на мгновение)\nsudo systemctl reload nginx    # перечитать конфиг без остановки (если поддерживает)\n\n# Включение/отключение автозапуска при загрузке системы\nsudo systemctl enable nginx\nsudo systemctl disable nginx\n\n# Просмотр всех юнитов (сервисов, таймеров, сокетов)\nsystemctl list-units --type=service --all\n\n# Просмотр логов сервиса (аналог journalctl)\nsudo journalctl -u nginx -f  # -f — следить в реальном времени\n",[44,988,989,994,1006,1013,1019,1031,1043,1059,1074,1079,1085,1097,1109,1114,1120,1135,1140,1146],{"__ignoreMap":85},[89,990,991],{"class":91,"line":92},[89,992,993],{"class":95},"# Статус сервиса (запущен ли, PID, последние логи)\n",[89,995,996,998,1001,1004],{"class":91,"line":99},[89,997,362],{"class":102},[89,999,1000],{"class":105}," systemctl",[89,1002,1003],{"class":105}," status",[89,1005,216],{"class":105},[89,1007,1009],{"class":91,"line":1008},3,[89,1010,1012],{"emptyLinePlaceholder":1011},true,"\n",[89,1014,1016],{"class":91,"line":1015},4,[89,1017,1018],{"class":95},"# Запуск/остановка/перезапуск\n",[89,1020,1022,1024,1026,1029],{"class":91,"line":1021},5,[89,1023,362],{"class":102},[89,1025,1000],{"class":105},[89,1027,1028],{"class":105}," start",[89,1030,216],{"class":105},[89,1032,1034,1036,1038,1041],{"class":91,"line":1033},6,[89,1035,362],{"class":102},[89,1037,1000],{"class":105},[89,1039,1040],{"class":105}," stop",[89,1042,216],{"class":105},[89,1044,1046,1048,1050,1053,1056],{"class":91,"line":1045},7,[89,1047,362],{"class":102},[89,1049,1000],{"class":105},[89,1051,1052],{"class":105}," restart",[89,1054,1055],{"class":105}," nginx",[89,1057,1058],{"class":95},"   # мягкий перезапуск (может отключить на мгновение)\n",[89,1060,1062,1064,1066,1069,1071],{"class":91,"line":1061},8,[89,1063,362],{"class":102},[89,1065,1000],{"class":105},[89,1067,1068],{"class":105}," reload",[89,1070,1055],{"class":105},[89,1072,1073],{"class":95},"    # перечитать конфиг без остановки (если поддерживает)\n",[89,1075,1077],{"class":91,"line":1076},9,[89,1078,1012],{"emptyLinePlaceholder":1011},[89,1080,1082],{"class":91,"line":1081},10,[89,1083,1084],{"class":95},"# Включение/отключение автозапуска при загрузке системы\n",[89,1086,1088,1090,1092,1095],{"class":91,"line":1087},11,[89,1089,362],{"class":102},[89,1091,1000],{"class":105},[89,1093,1094],{"class":105}," enable",[89,1096,216],{"class":105},[89,1098,1100,1102,1104,1107],{"class":91,"line":1099},12,[89,1101,362],{"class":102},[89,1103,1000],{"class":105},[89,1105,1106],{"class":105}," disable",[89,1108,216],{"class":105},[89,1110,1112],{"class":91,"line":1111},13,[89,1113,1012],{"emptyLinePlaceholder":1011},[89,1115,1117],{"class":91,"line":1116},14,[89,1118,1119],{"class":95},"# Просмотр всех юнитов (сервисов, таймеров, сокетов)\n",[89,1121,1123,1126,1129,1132],{"class":91,"line":1122},15,[89,1124,1125],{"class":102},"systemctl",[89,1127,1128],{"class":105}," list-units",[89,1130,1131],{"class":156}," --type=service",[89,1133,1134],{"class":156}," --all\n",[89,1136,1138],{"class":91,"line":1137},16,[89,1139,1012],{"emptyLinePlaceholder":1011},[89,1141,1143],{"class":91,"line":1142},17,[89,1144,1145],{"class":95},"# Просмотр логов сервиса (аналог journalctl)\n",[89,1147,1149,1151,1154,1157,1159,1162],{"class":91,"line":1148},18,[89,1150,362],{"class":102},[89,1152,1153],{"class":105}," journalctl",[89,1155,1156],{"class":156}," -u",[89,1158,1055],{"class":105},[89,1160,1161],{"class":156}," -f",[89,1163,1164],{"class":95},"  # -f — следить в реальном времени\n",[61,1166,1168],{"id":1167},"создание-собственного-сервиса","Создание собственного сервиса",[1170,1171,1172,1178,1251],"ol",{},[28,1173,1174,1175],{},"Создайте файл конфигурации: ",[44,1176,1177],{},"sudo nano /etc/systemd/system/myapp.service",[28,1179,1180,1181],{},"Базовый шаблон:\n",[80,1182,1186],{"className":1183,"code":1184,"language":1185,"meta":85,"style":85},"language-ini shiki shiki-themes github-light github-dark","[Unit]\nDescription=Мой кастомный сервис\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/bin/python3 /opt/myapp/main.py\nRestart=on-failure\nUser=appuser\nWorkingDirectory=/opt/myapp\n\n[Install]\nWantedBy=multi-user.target\n","ini",[44,1187,1188,1193,1198,1203,1207,1212,1217,1222,1227,1232,1237,1241,1246],{"__ignoreMap":85},[89,1189,1190],{"class":91,"line":92},[89,1191,1192],{},"[Unit]\n",[89,1194,1195],{"class":91,"line":99},[89,1196,1197],{},"Description=Мой кастомный сервис\n",[89,1199,1200],{"class":91,"line":1008},[89,1201,1202],{},"After=network.target\n",[89,1204,1205],{"class":91,"line":1015},[89,1206,1012],{"emptyLinePlaceholder":1011},[89,1208,1209],{"class":91,"line":1021},[89,1210,1211],{},"[Service]\n",[89,1213,1214],{"class":91,"line":1033},[89,1215,1216],{},"Type=simple\n",[89,1218,1219],{"class":91,"line":1045},[89,1220,1221],{},"ExecStart=/usr/bin/python3 /opt/myapp/main.py\n",[89,1223,1224],{"class":91,"line":1061},[89,1225,1226],{},"Restart=on-failure\n",[89,1228,1229],{"class":91,"line":1076},[89,1230,1231],{},"User=appuser\n",[89,1233,1234],{"class":91,"line":1081},[89,1235,1236],{},"WorkingDirectory=/opt/myapp\n",[89,1238,1239],{"class":91,"line":1087},[89,1240,1012],{"emptyLinePlaceholder":1011},[89,1242,1243],{"class":91,"line":1099},[89,1244,1245],{},"[Install]\n",[89,1247,1248],{"class":91,"line":1111},[89,1249,1250],{},"WantedBy=multi-user.target\n",[28,1252,1253,1254,181],{},"Активируйте: ",[44,1255,1256],{},"sudo systemctl daemon-reload && sudo systemctl enable --now myapp.service",[1258,1259],"in-article-ad",{},[16,1261,1263],{"id":1262},"продвинутый-мониторинг-и-анализ","Продвинутый мониторинг и анализ",[61,1265,1267,1270],{"id":1266},"strace-трассировка-системных-вызовов",[44,1268,1269],{},"strace"," — трассировка системных вызовов",[21,1272,1273,1274,1277,1278,1280],{},"Если нужно понять, ",[76,1275,1276],{},"что именно"," делает \"зависший\" процесс, используйте ",[44,1279,1269],{},". Он показывает все взаимодействия процесса с ядром (чтение/запись файлов, сетевые запросы и т.д.).",[80,1282,1284],{"className":82,"code":1283,"language":84,"meta":85,"style":85},"# Трассировать уже запущенный процесс\nsudo strace -p \u003CPID> -o trace.log\n\n# Запустить команду под strace\nsudo strace -o trace.log ./my_program\n",[44,1285,1286,1291,1318,1322,1327],{"__ignoreMap":85},[89,1287,1288],{"class":91,"line":92},[89,1289,1290],{"class":95},"# Трассировать уже запущенный процесс\n",[89,1292,1293,1295,1298,1300,1303,1306,1309,1312,1315],{"class":91,"line":99},[89,1294,362],{"class":102},[89,1296,1297],{"class":105}," strace",[89,1299,801],{"class":156},[89,1301,1302],{"class":209}," \u003C",[89,1304,1305],{"class":105},"PI",[89,1307,1308],{"class":845},"D",[89,1310,1311],{"class":209},">",[89,1313,1314],{"class":156}," -o",[89,1316,1317],{"class":105}," trace.log\n",[89,1319,1320],{"class":91,"line":1008},[89,1321,1012],{"emptyLinePlaceholder":1011},[89,1323,1324],{"class":91,"line":1015},[89,1325,1326],{"class":95},"# Запустить команду под strace\n",[89,1328,1329,1331,1333,1335,1338],{"class":91,"line":1021},[89,1330,362],{"class":102},[89,1332,1297],{"class":105},[89,1334,1314],{"class":156},[89,1336,1337],{"class":105}," trace.log",[89,1339,1340],{"class":105}," ./my_program\n",[21,1342,1343,1344,1347,1348,1351],{},"Используйте ",[44,1345,1346],{},"-c"," для статистики по системным вызовам, ",[44,1349,1350],{},"-f"," для следования за дочерними процессами.",[61,1353,1355,1357],{"id":1354},"lsof-что-открыто",[44,1356,421],{}," — \"что открыто?\"",[21,1359,1360],{},"Уже упоминалась, но стоит выделить отдельно. Это швейцарский нож для анализа.",[80,1362,1364],{"className":82,"code":1363,"language":84,"meta":85,"style":85},"# Все открытые файлы для конкретного PID\nsudo lsof -p \u003CPID>\n\n# Все сетевые соединения (аналог netstat)\nsudo lsof -i\n\n# Кто держит каталог /mnt/backup (например, для unmount)\nsudo lsof +D /mnt/backup\n",[44,1365,1366,1371,1388,1392,1397,1406,1410,1415],{"__ignoreMap":85},[89,1367,1368],{"class":91,"line":92},[89,1369,1370],{"class":95},"# Все открытые файлы для конкретного PID\n",[89,1372,1373,1375,1377,1379,1381,1383,1385],{"class":91,"line":99},[89,1374,362],{"class":102},[89,1376,411],{"class":105},[89,1378,801],{"class":156},[89,1380,1302],{"class":209},[89,1382,1305],{"class":105},[89,1384,1308],{"class":845},[89,1386,1387],{"class":209},">\n",[89,1389,1390],{"class":91,"line":1008},[89,1391,1012],{"emptyLinePlaceholder":1011},[89,1393,1394],{"class":91,"line":1015},[89,1395,1396],{"class":95},"# Все сетевые соединения (аналог netstat)\n",[89,1398,1399,1401,1403],{"class":91,"line":1021},[89,1400,362],{"class":102},[89,1402,411],{"class":105},[89,1404,1405],{"class":156}," -i\n",[89,1407,1408],{"class":91,"line":1033},[89,1409,1012],{"emptyLinePlaceholder":1011},[89,1411,1412],{"class":91,"line":1045},[89,1413,1414],{"class":95},"# Кто держит каталог /mnt/backup (например, для unmount)\n",[89,1416,1417,1419,1421,1424],{"class":91,"line":1061},[89,1418,362],{"class":102},[89,1420,411],{"class":105},[89,1422,1423],{"class":105}," +D",[89,1425,1426],{"class":105}," /mnt/backup\n",[61,1428,1430,47,1433,1436],{"id":1429},"vmstat-и-iostat-общая-нагрузка-на-систему",[44,1431,1432],{},"vmstat",[44,1434,1435],{},"iostat"," — общая нагрузка на систему",[21,1438,1439],{},"Чтобы понять, проблема в процессе или в системе в целом:",[80,1441,1443],{"className":82,"code":1442,"language":84,"meta":85,"style":85},"# Процессы, память, своп, I/O, CPU (обновляется каждые 2 сек)\nvmstat 2\n\n# Статистика по дисковому вводу-выводу\niostat -xz 2\n",[44,1444,1445,1450,1457,1461,1466],{"__ignoreMap":85},[89,1446,1447],{"class":91,"line":92},[89,1448,1449],{"class":95},"# Процессы, память, своп, I/O, CPU (обновляется каждые 2 сек)\n",[89,1451,1452,1454],{"class":91,"line":99},[89,1453,1432],{"class":102},[89,1455,1456],{"class":156}," 2\n",[89,1458,1459],{"class":91,"line":1008},[89,1460,1012],{"emptyLinePlaceholder":1011},[89,1462,1463],{"class":91,"line":1015},[89,1464,1465],{"class":95},"# Статистика по дисковому вводу-выводу\n",[89,1467,1468,1470,1473],{"class":91,"line":1021},[89,1469,1435],{"class":102},[89,1471,1472],{"class":156}," -xz",[89,1474,1456],{"class":156},[21,1476,1477,1478,1480,1481,1484,1485,1488,1489,1492],{},"Если ",[44,1479,1432],{}," показывает высокий ",[44,1482,1483],{},"wa"," (I/O wait) — проблема в дисках. Если высокий ",[44,1486,1487],{},"us","/",[44,1490,1491],{},"sy"," (user/system CPU) — проблема в процессах.",[16,1494,1496],{"id":1495},"заключение-и-лучшие-практики","Заключение и лучшие практики",[1170,1498,1499,1512,1527,1538,1549,1558,1567],{},[28,1500,1501,1511],{},[76,1502,1503,1504,562,1507,1488,1509],{},"Начинайте с ",[44,1505,1506],{},"ps aux",[44,1508,256],{},[44,1510,259],{}," для общего обзора.",[28,1513,1514,1523,1524,181],{},[76,1515,1343,1516,1488,1518,1488,1520],{},[44,1517,193],{},[44,1519,246],{},[44,1521,1522],{},"pkill"," для поиска, но проверяйте вывод перед ",[44,1525,1526],{},"killall",[28,1528,1529,129,1535,1537],{},[76,1530,1531,1532,1534],{},"Отправляйте ",[44,1533,525],{}," (kill) в первую очередь",[44,1536,547],{}," (-9) — только в крайнем случае.",[28,1539,1540,1545,1546,1548],{},[76,1541,1542,1543],{},"Для сервисов используйте ",[44,1544,1125],{},", а не ручной запуск через ",[44,1547,831],{},". Это даст автоматический перезапуск, логирование и управление.",[28,1550,1551,1557],{},[76,1552,1553,47,1555],{},[44,1554,920],{},[44,1556,958],{}," — ваши друзья для долгих задач в нестабильном SSH-сессии.",[28,1559,1560,1566],{},[76,1561,1562,47,1564],{},[44,1563,1269],{},[44,1565,421],{}," — мощные отладочные инструменты для глубокого анализа.",[28,1568,1569,1572,1573,562,1575,1577,1578,181],{},[76,1570,1571],{},"Права:"," Для управления чужими процессами (особенно через ",[44,1574,50],{},[44,1576,773],{},") часто нужны права ",[44,1579,362],{},[21,1581,1582,1583,1586],{},"Управление процессами — это навык, который оттачивается практикой. Экспериментируйте в тестовой среде, создавайте \"игрушечные\" зависшие процессы (",[44,1584,1585],{},"sleep 1000 &",") и отрабатывайте на них команды.",[1588,1589,1590],"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 .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 .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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":85,"searchDepth":99,"depth":99,"links":1592},[1593,1594,1600,1605,1609,1610,1615,1619,1627],{"id":18,"depth":99,"text":19},{"id":58,"depth":99,"text":59,"children":1595},[1596,1598],{"id":63,"depth":1008,"text":1597},"Команда ps — снимок процессов",{"id":253,"depth":1008,"text":1599},"top и htop — интерактивный мониторинг",{"id":336,"depth":99,"text":337,"children":1601},[1602,1603,1604],{"id":343,"depth":1008,"text":344},{"id":425,"depth":1008,"text":426},{"id":450,"depth":1008,"text":451},{"id":479,"depth":99,"text":480,"children":1606},[1607,1608],{"id":483,"depth":1008,"text":484},{"id":622,"depth":1008,"text":623},{"id":701,"depth":99,"text":702},{"id":820,"depth":99,"text":821,"children":1611},[1612,1613,1614],{"id":824,"depth":1008,"text":825},{"id":863,"depth":1008,"text":864},{"id":901,"depth":1008,"text":902},{"id":973,"depth":99,"text":974,"children":1616},[1617,1618],{"id":982,"depth":1008,"text":983},{"id":1167,"depth":1008,"text":1168},{"id":1262,"depth":99,"text":1263,"children":1620},[1621,1623,1625],{"id":1266,"depth":1008,"text":1622},"strace — трассировка системных вызовов",{"id":1354,"depth":1008,"text":1624},"lsof — \"что открыто?\"",{"id":1429,"depth":1008,"text":1626},"vmstat и iostat — общая нагрузка на систему",{"id":1495,"depth":99,"text":1496},null,"2026-02-14 12:11:36","Полное руководство по мониторингу и управлению процессами в Linux. Изучите ps, top, kill, nice, systemctl и другие инструменты для эффективной администрирования системы.","medium",false,"15-30 мин","md",[1636,1639,1642,1645],{"question":1637,"answer":1638},"В чём разница между командами kill и killall?","`kill` завершает процесс по его PID (идентификатору), который нужно предварительно узнать. `killall` завершает все процессы с указанным именем, что удобно, но может быть опаснее, если у программы несколько экземпляров.",{"question":1640,"answer":1641},"Как найти PID процесса, который слушает определённый порт (например, 8080)?","Используйте команду `sudo ss -tulpn | grep :8080` или `sudo lsof -i :8080`. В выводе вы увидите PID и имя программы.",{"question":1643,"answer":1644},"Почему команда top не показывает все мои процессы?","По умолчанию `top` показывает процессы текущего пользователя. Нажмите `u` в top и введите имя пользователя (или оставьте пустым для всех), чтобы seeing процессы всех пользователей. Также убедитесь, что вы запустили top с правами sudo для полной картины.",{"question":1646,"answer":1647},"Что такое zombie-процесс и как от него избавиться?","Zombie (зомби) — это завершившийся процесс, запись о котором ещё не удалена из таблицы процессов, так как родительский процесс не прочитал её статус. Обычно они исчезают сами после завершения родителя. Если зомби накапливаются, нужно перезапустить или исправить родительский процесс.",[1649,1652,1655,1658,1661,1664],{"name":1650,"text":1651},"Просмотр списка активных процессов","Используйте команду `ps` для снимка процессов или `top`/`htop` для интерактивного мониторинга в реальном времени. Ключевые опции: `ps aux` (все процессы) и `ps -ef` (полный формат).",{"name":1653,"text":1654},"Поиск конкретного процесса","Комбинируйте `ps` или `top` с `grep` для поиска по имени: `ps aux | grep nginx`. Для поиска по порту используйте `ss` или `lsof`.",{"name":1656,"text":1657},"Завершение (убийство) процесса","Найдите PID процесса и выполните `kill \u003CPID>`. Для принудительного завершения используйте сигнал `KILL` (9): `kill -9 \u003CPID>`. Для завершения по имени — `killall \u003Cимя_процесса>`.",{"name":1659,"text":1660},"Изменение приоритета процесса","Запустите процесс с низким приоритетом через `nice -n 19 команда`. Для уже запущенного процесса используйте `renice \u003Cновый_приоритет> -p \u003CPID>` (требует sudo для повышения приоритета).",{"name":1662,"text":1663},"Запуск процесса в фоне и управление им","Добавьте `&` в конец команды для запуска в фоне: `команда &`. Используйте `jobs` для просмотра фоновых задач, `fg %1` для возврата на передний план, `bg %1` для возобновления в фоне. `nohup` и `disown` позволяют сделать процесс независимым от терминала.",{"name":1665,"text":1666},"Управление сервисами через systemd","Для долгоживущих сервисов используйте systemd: `sudo systemctl start \u003Cservice>`, `sudo systemctl status \u003Cservice>`, `sudo systemctl enable \u003Cservice>` (автозапуск). Это предпочтительный способ для production-сервисов.","PT20M",[1669,1670,1671,1672,1673,1674,1675,1676],"управление процессами linux","команда ps linux примеры","как убить процесс в linux","systemd управление сервисами","мониторинг процессов linux top","сигналы linux kill term","приоритет процесса nice renice","фоновые процессы linux & nohup","ru_RU",{},"/guides/linux/process-management-basics","linux",[1682,1683,1684],"/guides/linux/systemd-service-creation","/guides/linux/log-analysis-basics","/errors/linux/process-zombie","Гайды Linux",{"title":5,"description":1630},"guides/linux/process-management-basics","Этот гайд научит вас находить, анализировать и управлять процессами в Linux с помощью командной строки. Вы освоите как базовые утилиты (ps, top, kill), так и современный менеджер systemd, что позволит вам контролировать работу системы и решать связанные проблемы.",[1680,1690,54,1691,1692,84,1693],"process management","cli","администрирование","мониторинг","guide","GkIEx60u1G9Bya8wIG_B7gM7Bghf81SASMUfFUPpAZo",{"data":1697,"body":1698},{},{"type":1699,"children":1700},"root",[1701],{"type":1702,"tag":21,"props":1703,"children":1704},"element",{},[1705,1711,1713,1718],{"type":1702,"tag":44,"props":1706,"children":1708},{"className":1707},[],[1709],{"type":1710,"value":50},"text",{"type":1710,"value":1712}," завершает процесс по его PID (идентификатору), который нужно предварительно узнать. ",{"type":1702,"tag":44,"props":1714,"children":1716},{"className":1715},[],[1717],{"type":1710,"value":1526},{"type":1710,"value":1719}," завершает все процессы с указанным именем, что удобно, но может быть опаснее, если у программы несколько экземпляров.",{"data":1721,"body":1722},{},{"type":1699,"children":1723},[1724],{"type":1702,"tag":21,"props":1725,"children":1726},{},[1727,1729,1735,1736,1742],{"type":1710,"value":1728},"Используйте команду ",{"type":1702,"tag":44,"props":1730,"children":1732},{"className":1731},[],[1733],{"type":1710,"value":1734},"sudo ss -tulpn | grep :8080",{"type":1710,"value":562},{"type":1702,"tag":44,"props":1737,"children":1739},{"className":1738},[],[1740],{"type":1710,"value":1741},"sudo lsof -i :8080",{"type":1710,"value":1743},". В выводе вы увидите PID и имя программы.",{"data":1745,"body":1746},{},{"type":1699,"children":1747},[1748],{"type":1702,"tag":21,"props":1749,"children":1750},{},[1751,1753,1758,1760,1765],{"type":1710,"value":1752},"По умолчанию ",{"type":1702,"tag":44,"props":1754,"children":1756},{"className":1755},[],[1757],{"type":1710,"value":256},{"type":1710,"value":1759}," показывает процессы текущего пользователя. Нажмите ",{"type":1702,"tag":44,"props":1761,"children":1763},{"className":1762},[],[1764],{"type":1710,"value":310},{"type":1710,"value":1766}," в top и введите имя пользователя (или оставьте пустым для всех), чтобы seeing процессы всех пользователей. Также убедитесь, что вы запустили top с правами sudo для полной картины.",{"data":1768,"body":1769},{},{"type":1699,"children":1770},[1771],{"type":1702,"tag":21,"props":1772,"children":1773},{},[1774],{"type":1710,"value":1647},{"data":1776,"body":1777},{},{"type":1699,"children":1778},[1779],{"type":1702,"tag":21,"props":1780,"children":1781},{},[1782,1783,1788,1790,1795,1796,1801,1803,1808,1810,1816],{"type":1710,"value":1728},{"type":1702,"tag":44,"props":1784,"children":1786},{"className":1785},[],[1787],{"type":1710,"value":46},{"type":1710,"value":1789}," для снимка процессов или ",{"type":1702,"tag":44,"props":1791,"children":1793},{"className":1792},[],[1794],{"type":1710,"value":256},{"type":1710,"value":1488},{"type":1702,"tag":44,"props":1797,"children":1799},{"className":1798},[],[1800],{"type":1710,"value":259},{"type":1710,"value":1802}," для интерактивного мониторинга в реальном времени. Ключевые опции: ",{"type":1702,"tag":44,"props":1804,"children":1806},{"className":1805},[],[1807],{"type":1710,"value":1506},{"type":1710,"value":1809}," (все процессы) и ",{"type":1702,"tag":44,"props":1811,"children":1813},{"className":1812},[],[1814],{"type":1710,"value":1815},"ps -ef",{"type":1710,"value":1817}," (полный формат).",{"data":1819,"body":1820},{},{"type":1699,"children":1821},[1822],{"type":1702,"tag":21,"props":1823,"children":1824},{},[1825,1827,1832,1833,1838,1839,1844,1846,1852,1854,1860,1861,1866],{"type":1710,"value":1826},"Комбинируйте ",{"type":1702,"tag":44,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":1710,"value":46},{"type":1710,"value":562},{"type":1702,"tag":44,"props":1834,"children":1836},{"className":1835},[],[1837],{"type":1710,"value":256},{"type":1710,"value":190},{"type":1702,"tag":44,"props":1840,"children":1842},{"className":1841},[],[1843],{"type":1710,"value":193},{"type":1710,"value":1845}," для поиска по имени: ",{"type":1702,"tag":44,"props":1847,"children":1849},{"className":1848},[],[1850],{"type":1710,"value":1851},"ps aux | grep nginx",{"type":1710,"value":1853},". Для поиска по порту используйте ",{"type":1702,"tag":44,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":1710,"value":1859},"ss",{"type":1710,"value":562},{"type":1702,"tag":44,"props":1862,"children":1864},{"className":1863},[],[1865],{"type":1710,"value":421},{"type":1710,"value":181},{"data":1868,"body":1869},{},{"type":1699,"children":1870},[1871],{"type":1702,"tag":21,"props":1872,"children":1873},{},[1874,1876,1881,1883,1889,1891,1896,1898,1903],{"type":1710,"value":1875},"Найдите PID процесса и выполните ",{"type":1702,"tag":44,"props":1877,"children":1879},{"className":1878},[],[1880],{"type":1710,"value":539},{"type":1710,"value":1882},". Для принудительного завершения используйте сигнал ",{"type":1702,"tag":44,"props":1884,"children":1886},{"className":1885},[],[1887],{"type":1710,"value":1888},"KILL",{"type":1710,"value":1890}," (9): ",{"type":1702,"tag":44,"props":1892,"children":1894},{"className":1893},[],[1895],{"type":1710,"value":561},{"type":1710,"value":1897},". Для завершения по имени — ",{"type":1702,"tag":44,"props":1899,"children":1901},{"className":1900},[],[1902],{"type":1710,"value":658},{"type":1710,"value":181},{"data":1905,"body":1906},{},{"type":1699,"children":1907},[1908],{"type":1702,"tag":21,"props":1909,"children":1910},{},[1911,1913,1919,1921,1927],{"type":1710,"value":1912},"Запустите процесс с низким приоритетом через ",{"type":1702,"tag":44,"props":1914,"children":1916},{"className":1915},[],[1917],{"type":1710,"value":1918},"nice -n 19 команда",{"type":1710,"value":1920},". Для уже запущенного процесса используйте ",{"type":1702,"tag":44,"props":1922,"children":1924},{"className":1923},[],[1925],{"type":1710,"value":1926},"renice \u003Cновый_приоритет> -p \u003CPID>",{"type":1710,"value":1928}," (требует sudo для повышения приоритета).",{"data":1930,"body":1931},{},{"type":1699,"children":1932},[1933],{"type":1702,"tag":21,"props":1934,"children":1935},{},[1936,1937,1942,1944,1950,1952,1957,1959,1964,1966,1971,1973,1978,1979,1984],{"type":1710,"value":828},{"type":1702,"tag":44,"props":1938,"children":1940},{"className":1939},[],[1941],{"type":1710,"value":831},{"type":1710,"value":1943}," в конец команды для запуска в фоне: ",{"type":1702,"tag":44,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":1710,"value":1949},"команда &",{"type":1710,"value":1951},". Используйте ",{"type":1702,"tag":44,"props":1953,"children":1955},{"className":1954},[],[1956],{"type":1710,"value":873},{"type":1710,"value":1958}," для просмотра фоновых задач, ",{"type":1702,"tag":44,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":1710,"value":881},{"type":1710,"value":1965}," для возврата на передний план, ",{"type":1702,"tag":44,"props":1967,"children":1969},{"className":1968},[],[1970],{"type":1710,"value":889},{"type":1710,"value":1972}," для возобновления в фоне. ",{"type":1702,"tag":44,"props":1974,"children":1976},{"className":1975},[],[1977],{"type":1710,"value":920},{"type":1710,"value":47},{"type":1702,"tag":44,"props":1980,"children":1982},{"className":1981},[],[1983],{"type":1710,"value":958},{"type":1710,"value":1985}," позволяют сделать процесс независимым от терминала.",{"data":1987,"body":1988},{},{"type":1699,"children":1989},[1990],{"type":1702,"tag":21,"props":1991,"children":1992},{},[1993,1995,2001,2002,2008,2009,2015],{"type":1710,"value":1994},"Для долгоживущих сервисов используйте systemd: ",{"type":1702,"tag":44,"props":1996,"children":1998},{"className":1997},[],[1999],{"type":1710,"value":2000},"sudo systemctl start \u003Cservice>",{"type":1710,"value":129},{"type":1702,"tag":44,"props":2003,"children":2005},{"className":2004},[],[2006],{"type":1710,"value":2007},"sudo systemctl status \u003Cservice>",{"type":1710,"value":129},{"type":1702,"tag":44,"props":2010,"children":2012},{"className":2011},[],[2013],{"type":1710,"value":2014},"sudo systemctl enable \u003Cservice>",{"type":1710,"value":2016}," (автозапуск). Это предпочтительный способ для production-сервисов.",[2018,2949,4233],{"id":2019,"title":2020,"appliesTo":2021,"author":11,"body":2023,"canonical":1628,"code":1628,"createdAt":2894,"description":2895,"difficulty":1631,"draft":1632,"estimatedTime":2896,"extension":1634,"faq":2897,"howToSteps":2910,"howToTotalTime":1667,"image":1628,"keywords":2926,"locale":1677,"meta":2935,"navigation":1011,"path":1682,"platform":1680,"related":2936,"section":2940,"seo":2941,"severity":1628,"stem":2942,"summary":2943,"tags":2944,"twitterCreator":1628,"twitterSite":1628,"type":1694,"updatedAt":2894,"__hash__":2948},"content_ru/guides/linux/systemd-service-creation.md","Создание systemd-сервиса в Linux: полное пошаговое руководство",[2022,10],"systemd (Ubuntu 22.04+, Debian 11+, CentOS 8+, RHEL 8+, Fedora 35+)",{"type":13,"value":2024,"toc":2881},[2025,2029,2032,2035,2053,2057,2060,2085,2089,2095,2190,2193,2217,2227,2231,2237,2252,2259,2269,2272,2343,2348,2473,2486,2490,2497,2511,2514,2530,2536,2540,2543,2558,2561,2576,2581,2588,2591,2621,2625,2628,2680,2682,2686,2732,2736,2758,2801,2834,2853,2878],[16,2026,2028],{"id":2027},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,2030,2031],{},"Systemd — это современная система инициализации и менеджер служб для большинства дистрибутивов Linux. Создание собственного сервиса (демона) позволяет автоматически запускать ваши скрипты или программы при загрузке системы, управлять их жизненным циклом (старт, стоп, перезагрузка), централизованно логировать вывод и обеспечивать восстановление при сбоях. Это стандартный и надёжный способ развёртывания фоновых задач в Linux.",[21,2033,2034],{},"После выполнения этого гайда вы сможете создать работающий сервис для любой исполняемой программы (Python-скрипт, bash-скрипт, бинарный файл), который будет:",[25,2036,2037,2040,2043,2050],{},[28,2038,2039],{},"Автоматически стартовать при загрузке ОС.",[28,2041,2042],{},"Корректно завершаться при выключении.",[28,2044,2045,2046,2049],{},"Писать логи в ",[44,2047,2048],{},"journald"," (системный журнал).",[28,2051,2052],{},"Перезапускаться при аварийном завершении.",[16,2054,2056],{"id":2055},"требования-подготовка","Требования / Подготовка",[21,2058,2059],{},"Перед началом убедитесь, что:",[1170,2061,2062,2068,2071,2082],{},[28,2063,2064,2065,2067],{},"У вас есть доступ к терминалу с правами ",[76,2066,362],{}," (для системных сервисов) или доступ к домашней директории (для пользовательских).",[28,2069,2070],{},"На системе установлен systemd (актуально для всех современных дистрибутивов: Ubuntu 22.04+, Debian 11+, CentOS 8/RHEL 8+, Fedora 35+).",[28,2072,2073,2074,2077,2078,2081],{},"Исполняемый файл или скрипт, который нужно сервисировать, уже готов, протестирован вручную и имеет ",[76,2075,2076],{},"права на выполнение"," (",[44,2079,2080],{},"chmod +x /путь/к/файлу",").",[28,2083,2084],{},"Вы знаете абсолютный путь к этому исполняемому файлу.",[16,2086,2088],{"id":2087},"шаг-1-подготовка-исполняемого-скрипта-или-программы","Шаг 1: Подготовка исполняемого скрипта или программы",[21,2090,2091,2092,181],{},"Предположим, у вас есть простой bash-скрипт для мониторинга дискового пространства, который должен работать в фоне. Он уже создан и расположен по пути ",[44,2093,2094],{},"/opt/scripts/disk_monitor.sh",[80,2096,2098],{"className":82,"code":2097,"language":84,"meta":85,"style":85},"#!/bin/bash\n# Пример скрипта /opt/scripts/disk_monitor.sh\nwhile true; do\n    DATE=$(date '+%Y-%m-%d %H:%M:%S')\n    df -h / | tail -n1 | awk '{print \"ROOT: \" $5 \" used\"}' >> /var/log/disk_monitor.log\n    sleep 300\ndone\n",[44,2099,2100,2105,2110,2124,2144,2177,2185],{"__ignoreMap":85},[89,2101,2102],{"class":91,"line":92},[89,2103,2104],{"class":95},"#!/bin/bash\n",[89,2106,2107],{"class":91,"line":99},[89,2108,2109],{"class":95},"# Пример скрипта /opt/scripts/disk_monitor.sh\n",[89,2111,2112,2115,2118,2121],{"class":91,"line":1008},[89,2113,2114],{"class":209},"while",[89,2116,2117],{"class":156}," true",[89,2119,2120],{"class":845},"; ",[89,2122,2123],{"class":209},"do\n",[89,2125,2126,2129,2132,2135,2138,2141],{"class":91,"line":1015},[89,2127,2128],{"class":845},"    DATE",[89,2130,2131],{"class":209},"=",[89,2133,2134],{"class":845},"$(",[89,2136,2137],{"class":102},"date",[89,2139,2140],{"class":105}," '+%Y-%m-%d %H:%M:%S'",[89,2142,2143],{"class":845},")\n",[89,2145,2146,2149,2152,2155,2157,2160,2163,2165,2168,2171,2174],{"class":91,"line":1021},[89,2147,2148],{"class":102},"    df",[89,2150,2151],{"class":156}," -h",[89,2153,2154],{"class":105}," /",[89,2156,210],{"class":209},[89,2158,2159],{"class":102}," tail",[89,2161,2162],{"class":156}," -n1",[89,2164,210],{"class":209},[89,2166,2167],{"class":102}," awk",[89,2169,2170],{"class":105}," '{print \"ROOT: \" $5 \" used\"}'",[89,2172,2173],{"class":209}," >>",[89,2175,2176],{"class":105}," /var/log/disk_monitor.log\n",[89,2178,2179,2182],{"class":91,"line":1033},[89,2180,2181],{"class":102},"    sleep",[89,2183,2184],{"class":156}," 300\n",[89,2186,2187],{"class":91,"line":1045},[89,2188,2189],{"class":209},"done\n",[21,2191,2192],{},"Проверьте его работоспособность вручную:",[80,2194,2196],{"className":82,"code":2195,"language":84,"meta":85,"style":85},"sudo chmod +x /opt/scripts/disk_monitor.sh\nsudo /opt/scripts/disk_monitor.sh\n",[44,2197,2198,2211],{"__ignoreMap":85},[89,2199,2200,2202,2205,2208],{"class":91,"line":92},[89,2201,362],{"class":102},[89,2203,2204],{"class":105}," chmod",[89,2206,2207],{"class":105}," +x",[89,2209,2210],{"class":105}," /opt/scripts/disk_monitor.sh\n",[89,2212,2213,2215],{"class":91,"line":99},[89,2214,362],{"class":102},[89,2216,2210],{"class":105},[21,2218,2219,2220,2222,2223,2226],{},"Нажмите ",[44,2221,581],{}," для тестовой остановки. Убедитесь, что в ",[44,2224,2225],{},"/var/log/disk_monitor.log"," появляются записи.",[16,2228,2230],{"id":2229},"шаг-2-создание-unit-файла","Шаг 2: Создание unit-файла",[21,2232,2233,2234,181],{},"Создайте файл сервиса. Для системного сервиса (работающего от root или указанного пользователя) используйте ",[44,2235,2236],{},"/etc/systemd/system/",[80,2238,2240],{"className":82,"code":2239,"language":84,"meta":85,"style":85},"sudo nano /etc/systemd/system/disk-monitor.service\n",[44,2241,2242],{"__ignoreMap":85},[89,2243,2244,2246,2249],{"class":91,"line":92},[89,2245,362],{"class":102},[89,2247,2248],{"class":105}," nano",[89,2250,2251],{"class":105}," /etc/systemd/system/disk-monitor.service\n",[232,2253,2254],{},[21,2255,809,2256,2258],{},[76,2257,812],{}," Имя файла обычно совпадает с именем сервиса. Используйте латинские буквы, цифры, дефисы. Точка в имени не требуется, но допустима.",[16,2260,2262,2263,47,2266],{"id":2261},"шаг-3-написание-базовой-конфигурации-unit-и-service","Шаг 3: Написание базовой конфигурации ",[89,2264,2265],{},"Unit",[89,2267,2268],{},"Service",[21,2270,2271],{},"Вставьте в редактор следующую конфигурацию. Она покрывает большинство базовых сценариев.",[80,2273,2275],{"className":1183,"code":2274,"language":1185,"meta":85,"style":85},"[Unit]\nDescription=Сервис мониторинга свободного места на корневом разделе\nDocumentation=man:df(1)\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/opt/scripts/disk_monitor.sh\nRestart=on-failure\nRestartSec=10\nUser=root\nGroup=root\n\n[Install]\nWantedBy=multi-user.target\n",[44,2276,2277,2281,2286,2291,2295,2299,2303,2307,2312,2316,2321,2326,2331,2335,2339],{"__ignoreMap":85},[89,2278,2279],{"class":91,"line":92},[89,2280,1192],{},[89,2282,2283],{"class":91,"line":99},[89,2284,2285],{},"Description=Сервис мониторинга свободного места на корневом разделе\n",[89,2287,2288],{"class":91,"line":1008},[89,2289,2290],{},"Documentation=man:df(1)\n",[89,2292,2293],{"class":91,"line":1015},[89,2294,1202],{},[89,2296,2297],{"class":91,"line":1021},[89,2298,1012],{"emptyLinePlaceholder":1011},[89,2300,2301],{"class":91,"line":1033},[89,2302,1211],{},[89,2304,2305],{"class":91,"line":1045},[89,2306,1216],{},[89,2308,2309],{"class":91,"line":1061},[89,2310,2311],{},"ExecStart=/opt/scripts/disk_monitor.sh\n",[89,2313,2314],{"class":91,"line":1076},[89,2315,1226],{},[89,2317,2318],{"class":91,"line":1081},[89,2319,2320],{},"RestartSec=10\n",[89,2322,2323],{"class":91,"line":1087},[89,2324,2325],{},"User=root\n",[89,2327,2328],{"class":91,"line":1099},[89,2329,2330],{},"Group=root\n",[89,2332,2333],{"class":91,"line":1111},[89,2334,1012],{"emptyLinePlaceholder":1011},[89,2336,2337],{"class":91,"line":1116},[89,2338,1245],{},[89,2340,2341],{"class":91,"line":1122},[89,2342,1250],{},[21,2344,2345],{},[76,2346,2347],{},"Разбор секций:",[25,2349,2350,2388,2447],{},[28,2351,2352,2357,2358],{},[76,2353,2354],{},[44,2355,2356],{},"[Unit]"," — метаданные и зависимости.\n",[25,2359,2360,2369],{},[28,2361,2362,2365,2366,2081],{},[44,2363,2364],{},"Description"," — краткое описание сервиса (показывается в ",[44,2367,2368],{},"systemctl status",[28,2370,2371,2374,2375,2379,2380,2383,2384,2387],{},[44,2372,2373],{},"After"," — указывает, что сервис должен стартовать ",[2376,2377,2378],"em",{},"после"," включения сети (",[44,2381,2382],{},"network.target","). Для не-сетевых сервисов можно убрать или указать ",[44,2385,2386],{},"local-fs.target"," (после монтирования локальных ФС).",[28,2389,2390,2395,2396],{},[76,2391,2392],{},[44,2393,2394],{},"[Service]"," — основная конфигурация процесса.\n",[25,2397,2398,2408,2416,2422,2428],{},[28,2399,2400,2403,2404,2407],{},[44,2401,2402],{},"Type=simple"," (по умолчанию) — systemd считает, что процесс, указанный в ",[44,2405,2406],{},"ExecStart",", является основным и работает в foreground. Подходит для большинства скриптов и современных программ.",[28,2409,2410,691,2412,2415],{},[44,2411,2406],{},[76,2413,2414],{},"абсолютный путь"," к команде/скрипту для запуска. Все аргументы указываются здесь.",[28,2417,2418,2421],{},[44,2419,2420],{},"Restart=on-failure"," — автоматически перезапускать сервис, если он завершился с ненулевым кодом возврата.",[28,2423,2424,2427],{},[44,2425,2426],{},"RestartSec=10"," — ждать 10 секунд перед перезапуском.",[28,2429,2430,1488,2433,2436,2437,2440,2441,2444,2445,181],{},[44,2431,2432],{},"User",[44,2434,2435],{},"Group"," — от имени какой пользователя/группы запускать процесс. ",[76,2438,2439],{},"Безопаснее"," указывать не-root пользователя (например, ",[44,2442,2443],{},"User=monitoruser","), если в этом нет необходимости. Для системных утилит может потребоваться ",[44,2446,1699],{},[28,2448,2449,2454,2455,924,2458],{},[76,2450,2451],{},[44,2452,2453],{},"[Install]"," — инструкции для ",[44,2456,2457],{},"systemctl enable",[25,2459,2460],{},[28,2461,2462,2465,2466,2469,2470,181],{},[44,2463,2464],{},"WantedBy=multi-user.target"," — создаст симлинк в ",[44,2467,2468],{},"/etc/systemd/system/multi-user.target.wants/",", что означает \"запускать при загрузке в многопользовательском режиме (стандартный)\". Для графических сервисов может использоваться ",[44,2471,2472],{},"graphical.target",[21,2474,2475,2476,129,2479,2482,2483,2081],{},"Сохраните файл (",[44,2477,2478],{},"Ctrl+O",[44,2480,2481],{},"Enter",") и закройте редактор (",[44,2484,2485],{},"Ctrl+X",[16,2487,2489],{"id":2488},"шаг-4-настройка-автозагрузки-и-инициализация","Шаг 4: Настройка автозагрузки и инициализация",[21,2491,2492,2493,2496],{},"После создания или изменения unit-файла ",[76,2494,2495],{},"обязательно"," выполните команду перезагрузки конфигурации systemd:",[80,2498,2500],{"className":82,"code":2499,"language":84,"meta":85,"style":85},"sudo systemctl daemon-reload\n",[44,2501,2502],{"__ignoreMap":85},[89,2503,2504,2506,2508],{"class":91,"line":92},[89,2505,362],{"class":102},[89,2507,1000],{"class":105},[89,2509,2510],{"class":105}," daemon-reload\n",[21,2512,2513],{},"Теперь включите сервис в автозагрузку (создаст симлинк):",[80,2515,2517],{"className":82,"code":2516,"language":84,"meta":85,"style":85},"sudo systemctl enable disk-monitor.service\n",[44,2518,2519],{"__ignoreMap":85},[89,2520,2521,2523,2525,2527],{"class":91,"line":92},[89,2522,362],{"class":102},[89,2524,1000],{"class":105},[89,2526,1094],{"class":105},[89,2528,2529],{"class":105}," disk-monitor.service\n",[21,2531,2532,2533],{},"Вывод: ",[44,2534,2535],{},"Created symlink /etc/systemd/system/multi-user.target.wants/disk-monitor.service → /etc/systemd/system/disk-monitor.service.",[16,2537,2539],{"id":2538},"шаг-5-запуск-и-проверка-статуса","Шаг 5: Запуск и проверка статуса",[21,2541,2542],{},"Запустите сервис вручную:",[80,2544,2546],{"className":82,"code":2545,"language":84,"meta":85,"style":85},"sudo systemctl start disk-monitor.service\n",[44,2547,2548],{"__ignoreMap":85},[89,2549,2550,2552,2554,2556],{"class":91,"line":92},[89,2551,362],{"class":102},[89,2553,1000],{"class":105},[89,2555,1028],{"class":105},[89,2557,2529],{"class":105},[21,2559,2560],{},"Проверьте его статус:",[80,2562,2564],{"className":82,"code":2563,"language":84,"meta":85,"style":85},"sudo systemctl status disk-monitor.service\n",[44,2565,2566],{"__ignoreMap":85},[89,2567,2568,2570,2572,2574],{"class":91,"line":92},[89,2569,362],{"class":102},[89,2571,1000],{"class":105},[89,2573,1003],{"class":105},[89,2575,2529],{"class":105},[21,2577,2578],{},[76,2579,2580],{},"Ожидаемый вывод (упрощённо):",[80,2582,2586],{"className":2583,"code":2585,"language":1710},[2584],"language-text","● disk-monitor.service - Сервис мониторинга свободного места на корневом разделе\n   Loaded: loaded (/etc/systemd/system/disk-monitor.service; enabled; vendor preset: enabled)\n   Active: active (running) since Wed 2026-02-15 14:30:00 MSK; 5s ago\n Main PID: 12345 (bash)\n    Tasks: 1 (limit: 4915)\n   Memory: 1.2M\n   CGroup: /system.slice/disk-monitor.service\n           └─12345 /bin/bash /opt/scripts/disk_monitor.sh\n",[44,2587,2585],{"__ignoreMap":85},[21,2589,2590],{},"Ключевые строки:",[25,2592,2593,2603,2609,2615],{},[28,2594,2595,2598,2599,2602],{},[44,2596,2597],{},"Loaded"," — файл загружен, ",[44,2600,2601],{},"enabled"," — включён в автозагрузку.",[28,2604,2605,2608],{},[44,2606,2607],{},"Active: active (running)"," — сервис работает.",[28,2610,2611,2614],{},[44,2612,2613],{},"Main PID"," — PID основного процесса.",[28,2616,2617,2620],{},[44,2618,2619],{},"CGroup"," — cgroup, в который помещён процесс.",[16,2622,2624],{"id":2623},"шаг-n-дополнительные-операции-управления","Шаг N: Дополнительные операции управления",[21,2626,2627],{},"Теперь вы можете управлять сервисом стандартными командами:",[25,2629,2630,2638,2647,2656,2667],{},[28,2631,2632,240,2635],{},[76,2633,2634],{},"Остановить:",[44,2636,2637],{},"sudo systemctl stop disk-monitor.service",[28,2639,2640,240,2643,2646],{},[76,2641,2642],{},"Перезапустить:",[44,2644,2645],{},"sudo systemctl restart disk-monitor.service"," (используйте, если меняли конфиг).",[28,2648,2649,240,2652,2655],{},[76,2650,2651],{},"Перезагрузить:",[44,2653,2654],{},"sudo systemctl reload disk-monitor.service"," (если сервис поддерживает SIGHUP для перечитывания конфига без полной остановки).",[28,2657,2658,240,2661,2077,2664,2666],{},[76,2659,2660],{},"Показать логи:",[44,2662,2663],{},"sudo journalctl -u disk-monitor.service -f",[44,2665,1350],{}," — следить за новыми записями в реальном времени).",[28,2668,2669,240,2672,2675,2676,2679],{},[76,2670,2671],{},"Проверить конфигурацию на синтаксис:",[44,2673,2674],{},"sudo systemctl daemon-reload"," (выполняется автоматически при ",[44,2677,2678],{},"enable/start",", но полезно после ручного редактирования файла).",[1258,2681],{},[16,2683,2685],{"id":2684},"проверка-результата","Проверка результата",[1170,2687,2688,2705,2718],{},[28,2689,2690,2693,2694,2697,2698,2701,2702,181],{},[76,2691,2692],{},"Автозапуск:"," Перезагрузите систему (",[44,2695,2696],{},"sudo reboot","). После входа проверьте статус сервиса: ",[44,2699,2700],{},"systemctl status disk-monitor.service",". Он должен быть ",[44,2703,2704],{},"active (running)",[28,2706,2707,2710,2711,2714,2715,181],{},[76,2708,2709],{},"Логирование:"," Убедитесь, что логи пишутся: ",[44,2712,2713],{},"sudo tail -f /var/log/disk_monitor.log"," или через journald: ",[44,2716,2717],{},"sudo journalctl -u disk-monitor.service",[28,2719,2720,2723,2724,2727,2728,2731],{},[76,2721,2722],{},"Автоматическое восстановление:"," Принудительно завершите процесс (например, ",[44,2725,2726],{},"sudo kill \u003CPID>"," из ",[44,2729,2730],{},"status","). Через несколько секунд проверьте статус снова — systemd должен его перезапустить.",[16,2733,2735],{"id":2734},"возможные-проблемы","Возможные проблемы",[21,2737,2738,240,2741,2743,2744,924,2747,2750,2751,2753,2754,2757],{},[76,2739,2740],{},"Проблема:",[44,2742,2368],{}," показывает ",[44,2745,2746],{},"failed (Result: exit-code)",[76,2748,2749],{},"Решение:"," Посмотрите детали ошибки в том же выводе ",[44,2752,2730],{}," (строка ",[44,2755,2756],{},"...","). Чаще всего это:",[25,2759,2760,2768,2776,2786],{},[28,2761,2762,2767],{},[76,2763,2764,2765,181],{},"Неправильный путь в ",[44,2766,2406],{}," Убедитесь, что путь абсолютный и файл существует.",[28,2769,2770,240,2773,181],{},[76,2771,2772],{},"Нет прав на выполнение.",[44,2774,2775],{},"sudo chmod +x /путь/к/скрипту",[28,2777,2778,2781,2782,2785],{},[76,2779,2780],{},"Ошибка внутри скрипта."," Запустите скрипт вручную от того же пользователя (",[44,2783,2784],{},"sudo -u \u003Cuser> /путь/к/скрипту",") и проверьте вывод.",[28,2787,2788,2791,2792,47,2795,2798,2799,181],{},[76,2789,2790],{},"Зависимости."," Если скрипту нужен доступ к сети или смонтированным дискам, проверьте ",[44,2793,2794],{},"After=",[44,2796,2797],{},"Requires="," в секции ",[44,2800,2356],{},[21,2802,2803,2805,2806,2809,2810,2813,2814,2816,2817,2820,2821,2824,2825,2827,2828,562,2831,181],{},[76,2804,2740],{}," Сервис не включается в автозагрузку (",[44,2807,2808],{},"systemctl is-enabled"," возвращает ",[44,2811,2812],{},"disabled",").\n",[76,2815,2749],{}," Выполните ",[44,2818,2819],{},"sudo systemctl enable disk-monitor.service"," ещё раз после ",[44,2822,2823],{},"daemon-reload",". Убедитесь, что в ",[44,2826,2453],{}," есть секция ",[44,2829,2830],{},"WantedBy=",[44,2832,2833],{},"RequiredBy=",[21,2835,2836,2838,2839,924,2842,2844,2845,2847,2848,2798,2851,181],{},[76,2837,2740],{}," Логи сервиса пустые в ",[44,2840,2841],{},"journalctl",[76,2843,2749],{}," По умолчанию systemd перехватывает stdout/stderr. Если скрипт пишет напрямую в файл (как в примере), в journald его вывод не попадёт. Это нормально. Для логирования через journald уберите перенаправление в файл из скрипта, а для постоянного хранения логов настройте ",[44,2846,2841],{}," с ротацией или используйте ",[44,2849,2850],{},"StandardOutput=append:/var/log/disk_monitor.log",[44,2852,2394],{},[21,2854,2855,2857,2858,2860,2861,2863,2864,2867,2868,47,2871,2874,2875,2877],{},[76,2856,2740],{}," Сервис запускается, но сразу завершается.\n",[76,2859,2749],{}," Это часто бывает при ",[44,2862,2402],{},", если основной процесс завершается. Для долгоживущих скриптов убедитесь, что в них есть бесконечный цикл или ожидание (",[44,2865,2866],{},"sleep","). Если программа сама демонизируется (fork), может потребоваться ",[44,2869,2870],{},"Type=forking",[44,2872,2873],{},"PIDFile=/var/run/имя.pid",". Но для простых скриптов с циклом ",[44,2876,2402],{}," — правильный выбор.",[1588,2879,2880],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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);}",{"title":85,"searchDepth":99,"depth":99,"links":2882},[2883,2884,2885,2886,2887,2889,2890,2891,2892,2893],{"id":2027,"depth":99,"text":2028},{"id":2055,"depth":99,"text":2056},{"id":2087,"depth":99,"text":2088},{"id":2229,"depth":99,"text":2230},{"id":2261,"depth":99,"text":2888},"Шаг 3: Написание базовой конфигурации Unit и Service",{"id":2488,"depth":99,"text":2489},{"id":2538,"depth":99,"text":2539},{"id":2623,"depth":99,"text":2624},{"id":2684,"depth":99,"text":2685},{"id":2734,"depth":99,"text":2735},"2026-02-15 00:19:05","Научитесь создавать, настраивать и управлять службами systemd. Пошаговая инструкция с примерами для Ubuntu, CentOS, Debian. Управление автозапуском, логированием и отладкой.","15-20 мин",[2898,2901,2904,2907],{"question":2899,"answer":2900},"Где правильно размещать пользовательские unit-файлы?","Пользовательские (несистемные) сервисы следует размещать в `~/.config/systemd/user/`. Системные — в `/etc/systemd/system/` или `/usr/lib/systemd/system/` (предпочтительнее первый для ручных правок).",{"question":2902,"answer":2903},"Почему мой сервис не запускается после создания?","Чаще всего это связано с неправильными путями в `ExecStart`, отсутствием прав на выполнение скрипта или зависимостями (`After`, `Requires`). Всегда проверяйте статус через `systemctl status \u003Cservice>` и логи через `journalctl -u \u003Cservice>`.",{"question":2905,"answer":2906},"Как сделать сервис, который запускается от конкретного пользователя, а не от root?","В unit-файле укажите `User=\u003Cимя_пользователя>` и `Group=\u003Cимя_группы>`. Для пользовательских сервисов (из `~/.config/systemd/user/`) используйте `systemctl --user enable/start \u003Cservice>`.",{"question":2908,"answer":2909},"Что такое `Type=forking` и когда он нужен?","`Type=forking` указывает, что процесс при старте порождает дочерний процесс (fork) и завершается. Используйте для старых демонов, которые работают по такому принципу. Для большинства современных программ, которые не форкаются, подходит `Type=simple` (по умолчанию) или `Type=exec`.",[2911,2914,2917,2920,2923],{"name":2912,"text":2913},"Подготовка исполняемого скрипта или программы","Убедитесь, что программа/скрипт, который вы хотите запускать как сервис, работает вручную и имеет правильные права на выполнение (`chmod +x /path/to/script`).",{"name":2915,"text":2916},"Создание unit-файла","Создайте новый файл с расширением `.service` в `/etc/systemd/system/` (для системных) или `~/.config/systemd/user/` (для пользовательских).",{"name":2918,"text":2919},"Написание базовой конфигурации [Unit] и [Service]","Заполните секции `[Unit]` (описание, зависимости) и `[Service]` (тип, команда запуска, пользователь).",{"name":2921,"text":2922},"Настройка автозагрузки и инициализация","Выполните `systemctl daemon-reload` для подгрузки конфигурации, затем `systemctl enable \u003Cservice>` для добавления в автозагрузку.",{"name":2924,"text":2925},"Запуск и проверка статуса","Запустите сервис командой `systemctl start \u003Cservice>` и проверьте его состояние через `systemctl status \u003Cservice>`.",[2927,2928,2929,2930,2931,2932,2933,2934],"создать systemd сервис","как написать unit файл systemd","systemd service example","автозапуск программы в linux systemd","управление службами systemd команды","systemctl create service","добавить службу в systemd","systemd tutorial русский",{},[2937,2938,2939],"/guides/linux/systemd-journald-analysis","/guides/linux/systemctl-commands-cheatsheet","/errors/linux/systemd-service-failed-to-start","Гайды по Linux",{"title":2020,"description":2895},"guides/linux/systemd-service-creation","Это руководство подробно объясняет, как создать собственный системный сервис (демон) в Linux с помощью systemd. Вы научитесь писать unit-файлы, управлять сервисом (старт/стоп/статус), настраивать автозагрузку и логирование.",[54,1680,1692,2945,2946,2947],"sysadmin","демон","unit-файл","92OTMJU-gK5pAI7b6Q3A0ZIa7ahTG1lwnLDH_ptn6pI",{"id":2950,"title":2951,"appliesTo":2952,"author":11,"body":2956,"canonical":1628,"code":85,"createdAt":4175,"description":4176,"difficulty":4177,"draft":1632,"estimatedTime":4178,"extension":1634,"faq":4179,"howToSteps":4192,"howToTotalTime":4208,"image":1628,"keywords":4209,"locale":1677,"meta":4220,"navigation":1011,"path":1683,"platform":1680,"related":4221,"section":1685,"seo":4225,"severity":85,"stem":4226,"summary":4227,"tags":4228,"twitterCreator":1628,"twitterSite":1628,"type":1694,"updatedAt":4175,"__hash__":4232},"content_ru/guides/linux/log-analysis-basics.md","Анализ логов Linux: пошаговое руководство для начинающих",[2953,2954,8,2955],"Ubuntu 20.04+","CentOS 8+","Any systemd-based distro",{"type":13,"value":2957,"toc":4142},[2958,2960,2963,2965,2985,2989,2996,3000,3146,3156,3160,3166,3170,3214,3218,3363,3367,3370,3377,3383,3452,3459,3469,3501,3507,3518,3588,3603,3607,3610,3708,3712,3715,3719,3725,3775,3781,3785,3803,3805,3808,3828,3830,3834,3864,3868,3898,3902,3929,3933,3962,3964,3968,3971,4123,4127,4139],[16,2959,2028],{"id":2027},[21,2961,2962],{},"Логи (journal) в Linux — это главный источник информации о том, что происходит в системе. Они содержат записи от ядра, системных служб и приложений. Умение быстро находить в них нужные данные — ключевой навык для диагностики сбоев, анализа безопасности и мониторинга производительности. После этого гайда вы сможете не просто \"смотреть логи\", а целенаправленно искать причины проблем.",[16,2964,2056],{"id":2055},[1170,2966,2967,2973,2979,2982],{},[28,2968,2969,2972],{},[76,2970,2971],{},"Доступ к терминалу"," Linux (Ubuntu, CentOS, Debian или другой дистрибутив с systemd).",[28,2974,2975,2978],{},[76,2976,2977],{},"Права sudo"," (администратора) для чтения большинства системных логов. Без них вы увидите только записи, связанные с вашим пользователем.",[28,2980,2981],{},"Базовое знакомство с командной строкой (навигация, запуск команд).",[28,2983,2984],{},"Понимание, какая служба или процесс вызывает проблему (например, веб-сервер не запускается, сеть не поднимается).",[16,2986,2988],{"id":2987},"шаг-1-начните-с-systemd-journal-journalctl","Шаг 1: Начните с systemd journal (journalctl)",[21,2990,2991,2992,2995],{},"Современные дистрибутивы Linux используют ",[76,2993,2994],{},"systemd-journald"," для централизованного сбора логов. Это самый мощный и удобный инструмент.",[61,2997,2999],{"id":2998},"основные-команды-для-начала","Основные команды для начала:",[80,3001,3003],{"className":82,"code":3002,"language":84,"meta":85,"style":85},"# Показать все логи системы (сначала самые свежие)\nsudo journalctl\n\n# Показать логи только за текущую загрузку системы\nsudo journalctl -b\n\n# Фильтрация по конкретной службе (например, ssh)\nsudo journalctl -u ssh.service\n\n# Логи с уровнем ошибка (err) и выше (crit, alert, emerg)\nsudo journalctl -p err\n\n# Логи за определённый период\nsudo journalctl --since \"2024-01-15 09:00:00\" --until \"10:30\"\nsudo journalctl --since 1h  # за последний час\nsudo journalctl --since today\n\n# Следить за логами в реальном времени (аналог tail -f)\nsudo journalctl -f\n",[44,3004,3005,3010,3017,3021,3026,3035,3039,3044,3055,3059,3064,3075,3079,3084,3102,3116,3127,3131,3136],{"__ignoreMap":85},[89,3006,3007],{"class":91,"line":92},[89,3008,3009],{"class":95},"# Показать все логи системы (сначала самые свежие)\n",[89,3011,3012,3014],{"class":91,"line":99},[89,3013,362],{"class":102},[89,3015,3016],{"class":105}," journalctl\n",[89,3018,3019],{"class":91,"line":1008},[89,3020,1012],{"emptyLinePlaceholder":1011},[89,3022,3023],{"class":91,"line":1015},[89,3024,3025],{"class":95},"# Показать логи только за текущую загрузку системы\n",[89,3027,3028,3030,3032],{"class":91,"line":1021},[89,3029,362],{"class":102},[89,3031,1153],{"class":105},[89,3033,3034],{"class":156}," -b\n",[89,3036,3037],{"class":91,"line":1033},[89,3038,1012],{"emptyLinePlaceholder":1011},[89,3040,3041],{"class":91,"line":1045},[89,3042,3043],{"class":95},"# Фильтрация по конкретной службе (например, ssh)\n",[89,3045,3046,3048,3050,3052],{"class":91,"line":1061},[89,3047,362],{"class":102},[89,3049,1153],{"class":105},[89,3051,1156],{"class":156},[89,3053,3054],{"class":105}," ssh.service\n",[89,3056,3057],{"class":91,"line":1076},[89,3058,1012],{"emptyLinePlaceholder":1011},[89,3060,3061],{"class":91,"line":1081},[89,3062,3063],{"class":95},"# Логи с уровнем ошибка (err) и выше (crit, alert, emerg)\n",[89,3065,3066,3068,3070,3072],{"class":91,"line":1087},[89,3067,362],{"class":102},[89,3069,1153],{"class":105},[89,3071,801],{"class":156},[89,3073,3074],{"class":105}," err\n",[89,3076,3077],{"class":91,"line":1099},[89,3078,1012],{"emptyLinePlaceholder":1011},[89,3080,3081],{"class":91,"line":1111},[89,3082,3083],{"class":95},"# Логи за определённый период\n",[89,3085,3086,3088,3090,3093,3096,3099],{"class":91,"line":1116},[89,3087,362],{"class":102},[89,3089,1153],{"class":105},[89,3091,3092],{"class":156}," --since",[89,3094,3095],{"class":105}," \"2024-01-15 09:00:00\"",[89,3097,3098],{"class":156}," --until",[89,3100,3101],{"class":105}," \"10:30\"\n",[89,3103,3104,3106,3108,3110,3113],{"class":91,"line":1122},[89,3105,362],{"class":102},[89,3107,1153],{"class":105},[89,3109,3092],{"class":156},[89,3111,3112],{"class":105}," 1h",[89,3114,3115],{"class":95},"  # за последний час\n",[89,3117,3118,3120,3122,3124],{"class":91,"line":1137},[89,3119,362],{"class":102},[89,3121,1153],{"class":105},[89,3123,3092],{"class":156},[89,3125,3126],{"class":105}," today\n",[89,3128,3129],{"class":91,"line":1142},[89,3130,1012],{"emptyLinePlaceholder":1011},[89,3132,3133],{"class":91,"line":1148},[89,3134,3135],{"class":95},"# Следить за логами в реальном времени (аналог tail -f)\n",[89,3137,3139,3141,3143],{"class":91,"line":3138},19,[89,3140,362],{"class":102},[89,3142,1153],{"class":105},[89,3144,3145],{"class":156}," -f\n",[21,3147,3148,3151,3152,3155],{},[76,3149,3150],{},"💡 Совет:"," Комбинация флагов — ваша главная сила. Пример: ",[44,3153,3154],{},"sudo journalctl -u nginx --since '10 minutes ago' -p warning"," покажет предупреждения и ошибки nginx за последние 10 минут.",[16,3157,3159],{"id":3158},"шаг-2-работа-с-классическими-текстовыми-логами-в-varlog","Шаг 2: Работа с классическими текстовыми логами в /var/log",[21,3161,3162,3163,181],{},"Хотя journalctl доминирует, многие приложения (особенно сторонние или в контейнерах) пишут в отдельные текстовые файлы в ",[44,3164,3165],{},"/var/log/",[61,3167,3169],{"id":3168},"ключевые-директории-и-файлы","Ключевые директории и файлы:",[25,3171,3172,3181,3190,3196,3205],{},[28,3173,3174,562,3177,3180],{},[44,3175,3176],{},"/var/log/syslog",[44,3178,3179],{},"/var/log/messages"," — общие системные события.",[28,3182,3183,562,3186,3189],{},[44,3184,3185],{},"/var/log/auth.log",[44,3187,3188],{},"/var/log/secure"," — логи аутентификации (ssh, sudo, login).",[28,3191,3192,3195],{},[44,3193,3194],{},"/var/log/kern.log"," — сообщения ядра.",[28,3197,3198,129,3201,3204],{},[44,3199,3200],{},"/var/log/nginx/",[44,3202,3203],{},"/var/log/apache2/"," — логи веб-серверов.",[28,3206,3207,3210,3211,2081],{},[44,3208,3209],{},"/var/log/dmesg"," — буфер сообщений ядра (аналог ",[44,3212,3213],{},"dmesg",[61,3215,3217],{"id":3216},"основные-команды-для-работы-с-текстовыми-логами","Основные команды для работы с текстовыми логами:",[80,3219,3221],{"className":82,"code":3220,"language":84,"meta":85,"style":85},"# Просмотр последних строк файла (как tail)\nsudo tail -n 50 /var/log/syslog\n\n# Поиск по шаблону (регистрозависимо)\nsudo grep \"failed\" /var/log/syslog\n\n# Поиск с игнорированием регистра\nsudo grep -i \"error\" /var/log/auth.log\n\n# Поиск по нескольким файлам\nsudo grep \"connection\" /var/log/nginx/*.log\n\n# Просмотр в реальном времени\nsudo tail -f /var/log/syslog\n\n# Поиск с контекстом (3 строки до и после совпадения)\nsudo grep -A 3 -B 3 \"segfault\" /var/log/kern.log\n",[44,3222,3223,3228,3242,3246,3251,3262,3266,3271,3285,3289,3294,3312,3316,3321,3331,3335,3340],{"__ignoreMap":85},[89,3224,3225],{"class":91,"line":92},[89,3226,3227],{"class":95},"# Просмотр последних строк файла (как tail)\n",[89,3229,3230,3232,3234,3236,3239],{"class":91,"line":99},[89,3231,362],{"class":102},[89,3233,2159],{"class":105},[89,3235,750],{"class":156},[89,3237,3238],{"class":156}," 50",[89,3240,3241],{"class":105}," /var/log/syslog\n",[89,3243,3244],{"class":91,"line":1008},[89,3245,1012],{"emptyLinePlaceholder":1011},[89,3247,3248],{"class":91,"line":1015},[89,3249,3250],{"class":95},"# Поиск по шаблону (регистрозависимо)\n",[89,3252,3253,3255,3257,3260],{"class":91,"line":1021},[89,3254,362],{"class":102},[89,3256,213],{"class":105},[89,3258,3259],{"class":105}," \"failed\"",[89,3261,3241],{"class":105},[89,3263,3264],{"class":91,"line":1033},[89,3265,1012],{"emptyLinePlaceholder":1011},[89,3267,3268],{"class":91,"line":1045},[89,3269,3270],{"class":95},"# Поиск с игнорированием регистра\n",[89,3272,3273,3275,3277,3279,3282],{"class":91,"line":1061},[89,3274,362],{"class":102},[89,3276,213],{"class":105},[89,3278,414],{"class":156},[89,3280,3281],{"class":105}," \"error\"",[89,3283,3284],{"class":105}," /var/log/auth.log\n",[89,3286,3287],{"class":91,"line":1076},[89,3288,1012],{"emptyLinePlaceholder":1011},[89,3290,3291],{"class":91,"line":1081},[89,3292,3293],{"class":95},"# Поиск по нескольким файлам\n",[89,3295,3296,3298,3300,3303,3306,3309],{"class":91,"line":1087},[89,3297,362],{"class":102},[89,3299,213],{"class":105},[89,3301,3302],{"class":105}," \"connection\"",[89,3304,3305],{"class":105}," /var/log/nginx/",[89,3307,3308],{"class":156},"*",[89,3310,3311],{"class":105},".log\n",[89,3313,3314],{"class":91,"line":1099},[89,3315,1012],{"emptyLinePlaceholder":1011},[89,3317,3318],{"class":91,"line":1111},[89,3319,3320],{"class":95},"# Просмотр в реальном времени\n",[89,3322,3323,3325,3327,3329],{"class":91,"line":1116},[89,3324,362],{"class":102},[89,3326,2159],{"class":105},[89,3328,1161],{"class":156},[89,3330,3241],{"class":105},[89,3332,3333],{"class":91,"line":1122},[89,3334,1012],{"emptyLinePlaceholder":1011},[89,3336,3337],{"class":91,"line":1137},[89,3338,3339],{"class":95},"# Поиск с контекстом (3 строки до и после совпадения)\n",[89,3341,3342,3344,3346,3349,3352,3355,3357,3360],{"class":91,"line":1142},[89,3343,362],{"class":102},[89,3345,213],{"class":105},[89,3347,3348],{"class":156}," -A",[89,3350,3351],{"class":156}," 3",[89,3353,3354],{"class":156}," -B",[89,3356,3351],{"class":156},[89,3358,3359],{"class":105}," \"segfault\"",[89,3361,3362],{"class":105}," /var/log/kern.log\n",[16,3364,3366],{"id":3365},"шаг-3-используйте-мощные-инструменты-для-сложного-анализа","Шаг 3: Используйте мощные инструменты для сложного анализа",[21,3368,3369],{},"Для глубокого анализа полезны утилиты, работающие как с выводом journalctl, так и с текстовыми файлами.",[61,3371,3373,3376],{"id":3372},"awk-для-извлечения-полей",[44,3374,3375],{},"awk"," — для извлечения полей",[21,3378,3379,3380,3382],{},"Логи часто имеют структурированный формат (дата, время, уровень, сообщение). ",[44,3381,3375],{}," позволяет работать с колонками.",[80,3384,3386],{"className":82,"code":3385,"language":84,"meta":85,"style":85},"# Из journalctl вывести только время и сообщение, отфильтровав по PID\nsudo journalctl -o short-iso | awk '$5 == \"1234\" {print $1, $2, $3}'\n\n# Из текстового лога посчитать, сколько раз встречается конкретная ошибка\nsudo grep \"No space left on device\" /var/log/syslog | awk '{print $1}' | sort | uniq -c\n",[44,3387,3388,3393,3411,3415,3420],{"__ignoreMap":85},[89,3389,3390],{"class":91,"line":92},[89,3391,3392],{"class":95},"# Из journalctl вывести только время и сообщение, отфильтровав по PID\n",[89,3394,3395,3397,3399,3401,3404,3406,3408],{"class":91,"line":99},[89,3396,362],{"class":102},[89,3398,1153],{"class":105},[89,3400,1314],{"class":156},[89,3402,3403],{"class":105}," short-iso",[89,3405,210],{"class":209},[89,3407,2167],{"class":102},[89,3409,3410],{"class":105}," '$5 == \"1234\" {print $1, $2, $3}'\n",[89,3412,3413],{"class":91,"line":1008},[89,3414,1012],{"emptyLinePlaceholder":1011},[89,3416,3417],{"class":91,"line":1015},[89,3418,3419],{"class":95},"# Из текстового лога посчитать, сколько раз встречается конкретная ошибка\n",[89,3421,3422,3424,3426,3429,3432,3434,3436,3439,3441,3444,3446,3449],{"class":91,"line":1021},[89,3423,362],{"class":102},[89,3425,213],{"class":105},[89,3427,3428],{"class":105}," \"No space left on device\"",[89,3430,3431],{"class":105}," /var/log/syslog",[89,3433,210],{"class":209},[89,3435,2167],{"class":102},[89,3437,3438],{"class":105}," '{print $1}'",[89,3440,210],{"class":209},[89,3442,3443],{"class":102}," sort",[89,3445,210],{"class":209},[89,3447,3448],{"class":102}," uniq",[89,3450,3451],{"class":156}," -c\n",[61,3453,3455,3458],{"id":3454},"less-поиск-для-интерактивного-изучения",[44,3456,3457],{},"less"," + поиск — для интерактивного изучения",[21,3460,3461,3462,3464,3465,3468],{},"Для больших файлов используйте ",[44,3463,3457],{}," (или ",[44,3466,3467],{},"sudo less /var/log/syslog","). Внутри less:",[25,3470,3471,3479,3487,3492],{},[28,3472,3473,3475,3476,2081],{},[44,3474,1488],{}," — начать поиск (например, ",[44,3477,3478],{},"/timeout",[28,3480,3481,329,3484,3486],{},[44,3482,3483],{},"n",[44,3485,292],{}," — следующее/предыдущее совпадение.",[28,3488,3489,3491],{},[44,3490,831],{}," — фильтровать вывод по шаблону (все строки, НЕ содержащие шаблон, скрываются).",[28,3493,3494,3497,3498,2081],{},[44,3495,3496],{},"F"," — режим слежения (как ",[44,3499,3500],{},"tail -f",[61,3502,3504,3506],{"id":3503},"journalctl-в-качестве-источника-для-других-утилит",[44,3505,2841],{}," в качестве источника для других утилит",[21,3508,3509,3510,3512,3513,129,3515,3517],{},"Вывод ",[44,3511,2841],{}," можно передавать в ",[44,3514,193],{},[44,3516,3375],{}," и т.д.",[80,3519,3521],{"className":82,"code":3520,"language":84,"meta":85,"style":85},"# Найти все записи, содержащие слово 'firewall', и сохранить их\nsudo journalctl | grep -i firewall > firewall_issues.log\n\n# Сортировать логи по PID и посмотреть уникальные процессы\nsudo journalctl -o json | jq -r '_processID' | sort | uniq\n",[44,3522,3523,3528,3548,3552,3557],{"__ignoreMap":85},[89,3524,3525],{"class":91,"line":92},[89,3526,3527],{"class":95},"# Найти все записи, содержащие слово 'firewall', и сохранить их\n",[89,3529,3530,3532,3534,3536,3538,3540,3543,3545],{"class":91,"line":99},[89,3531,362],{"class":102},[89,3533,1153],{"class":105},[89,3535,210],{"class":209},[89,3537,213],{"class":102},[89,3539,414],{"class":156},[89,3541,3542],{"class":105}," firewall",[89,3544,939],{"class":209},[89,3546,3547],{"class":105}," firewall_issues.log\n",[89,3549,3550],{"class":91,"line":1008},[89,3551,1012],{"emptyLinePlaceholder":1011},[89,3553,3554],{"class":91,"line":1015},[89,3555,3556],{"class":95},"# Сортировать логи по PID и посмотреть уникальные процессы\n",[89,3558,3559,3561,3563,3565,3568,3570,3573,3576,3579,3581,3583,3585],{"class":91,"line":1021},[89,3560,362],{"class":102},[89,3562,1153],{"class":105},[89,3564,1314],{"class":156},[89,3566,3567],{"class":105}," json",[89,3569,210],{"class":209},[89,3571,3572],{"class":102}," jq",[89,3574,3575],{"class":156}," -r",[89,3577,3578],{"class":105}," '_processID'",[89,3580,210],{"class":209},[89,3582,3443],{"class":102},[89,3584,210],{"class":209},[89,3586,3587],{"class":102}," uniq\n",[21,3589,3590],{},[2376,3591,3592,3593,47,3596,3599,3600,3602],{},"(Примечание: для работы с ",[44,3594,3595],{},"-o json",[44,3597,3598],{},"jq"," может потребоваться установка пакета ",[44,3601,3598],{},")",[16,3604,3606],{"id":3605},"шаг-4-сохраните-и-экспортируйте-важные-данные","Шаг 4: Сохраните и экспортируйте важные данные",[21,3608,3609],{},"Для долгосрочного анализа или отправки в поддержку нужно сохранить логи.",[80,3611,3613],{"className":82,"code":3612,"language":84,"meta":85,"style":85},"# Экспорт логов конкретной службы за последние 2 часа в файл (формат journalctl)\nsudo journalctl -u sshd --since 2h > sshd_last_2h.log\n\n# Экспорт в стандартизированный текстовый формат (с временными метками)\nsudo journalctl -u nginx --since yesterday --no-pager > nginx_yesterday.txt\n\n# Создание сжатого архива логов для отправки\nsudo journalctl --since 2024-01-01 --until 2024-01-07 | gzip > logs_jan1-7.txt.gz\n",[44,3614,3615,3620,3641,3645,3650,3673,3677,3682],{"__ignoreMap":85},[89,3616,3617],{"class":91,"line":92},[89,3618,3619],{"class":95},"# Экспорт логов конкретной службы за последние 2 часа в файл (формат journalctl)\n",[89,3621,3622,3624,3626,3628,3631,3633,3636,3638],{"class":91,"line":99},[89,3623,362],{"class":102},[89,3625,1153],{"class":105},[89,3627,1156],{"class":156},[89,3629,3630],{"class":105}," sshd",[89,3632,3092],{"class":156},[89,3634,3635],{"class":105}," 2h",[89,3637,939],{"class":209},[89,3639,3640],{"class":105}," sshd_last_2h.log\n",[89,3642,3643],{"class":91,"line":1008},[89,3644,1012],{"emptyLinePlaceholder":1011},[89,3646,3647],{"class":91,"line":1015},[89,3648,3649],{"class":95},"# Экспорт в стандартизированный текстовый формат (с временными метками)\n",[89,3651,3652,3654,3656,3658,3660,3662,3665,3668,3670],{"class":91,"line":1021},[89,3653,362],{"class":102},[89,3655,1153],{"class":105},[89,3657,1156],{"class":156},[89,3659,1055],{"class":105},[89,3661,3092],{"class":156},[89,3663,3664],{"class":105}," yesterday",[89,3666,3667],{"class":156}," --no-pager",[89,3669,939],{"class":209},[89,3671,3672],{"class":105}," nginx_yesterday.txt\n",[89,3674,3675],{"class":91,"line":1033},[89,3676,1012],{"emptyLinePlaceholder":1011},[89,3678,3679],{"class":91,"line":1045},[89,3680,3681],{"class":95},"# Создание сжатого архива логов для отправки\n",[89,3683,3684,3686,3688,3690,3693,3695,3698,3700,3703,3705],{"class":91,"line":1061},[89,3685,362],{"class":102},[89,3687,1153],{"class":105},[89,3689,3092],{"class":156},[89,3691,3692],{"class":105}," 2024-01-01",[89,3694,3098],{"class":156},[89,3696,3697],{"class":105}," 2024-01-07",[89,3699,210],{"class":209},[89,3701,3702],{"class":102}," gzip",[89,3704,939],{"class":209},[89,3706,3707],{"class":105}," logs_jan1-7.txt.gz\n",[16,3709,3711],{"id":3710},"шаг-5-настройте-логирование-профилактика","Шаг 5: Настройте логирование (профилактика)",[21,3713,3714],{},"Чтобы избежать ситуаций, когда логи забивают диск, настройте ротацию (удаление старых логов) и уровень детализации.",[61,3716,3718],{"id":3717},"для-systemd-journald","Для systemd-journald:",[21,3720,3721,3722,273],{},"Отредактируйте ",[44,3723,3724],{},"/etc/systemd/journald.conf",[80,3726,3728],{"className":1183,"code":3727,"language":1185,"meta":85,"style":85},"[Journal]\n# Ограничить общий размер журнала\nSystemMaxUse=500M\n# Ограничить размер одного файла журнала\nSystemMaxFileSize=50M\n# Хранить логи не дольше 2 недель\nMaxRetentionSec=2week\n# Уровень детализации (info, debug, warning...). Для продакшена оставьте info или warning.\n# MaxLevelStore=info\n",[44,3729,3730,3735,3740,3745,3750,3755,3760,3765,3770],{"__ignoreMap":85},[89,3731,3732],{"class":91,"line":92},[89,3733,3734],{},"[Journal]\n",[89,3736,3737],{"class":91,"line":99},[89,3738,3739],{},"# Ограничить общий размер журнала\n",[89,3741,3742],{"class":91,"line":1008},[89,3743,3744],{},"SystemMaxUse=500M\n",[89,3746,3747],{"class":91,"line":1015},[89,3748,3749],{},"# Ограничить размер одного файла журнала\n",[89,3751,3752],{"class":91,"line":1021},[89,3753,3754],{},"SystemMaxFileSize=50M\n",[89,3756,3757],{"class":91,"line":1033},[89,3758,3759],{},"# Хранить логи не дольше 2 недель\n",[89,3761,3762],{"class":91,"line":1045},[89,3763,3764],{},"MaxRetentionSec=2week\n",[89,3766,3767],{"class":91,"line":1061},[89,3768,3769],{},"# Уровень детализации (info, debug, warning...). Для продакшена оставьте info или warning.\n",[89,3771,3772],{"class":91,"line":1076},[89,3773,3774],{},"# MaxLevelStore=info\n",[21,3776,3777,3778,181],{},"Примените изменения: ",[44,3779,3780],{},"sudo systemctl restart systemd-journald",[61,3782,3784],{"id":3783},"для-классических-логов-logrotate","Для классических логов (logrotate):",[21,3786,3787,3788,3791,3792,3795,3796,47,3799,3802],{},"Логи в ",[44,3789,3790],{},"/var/log"," обычно управляются демоном ",[44,3793,3794],{},"logrotate",". Его конфигурация находится в ",[44,3797,3798],{},"/etc/logrotate.conf",[44,3800,3801],{},"/etc/logrotate.d/",". Стандартные настройки обычно адекватны.",[16,3804,2685],{"id":2684},[21,3806,3807],{},"Вы успешно научились анализировать логи, если можете:",[1170,3809,3810,3816,3819,3822],{},[28,3811,3812,3813,2081],{},"Найти последние ошибки для конкретной службы (например, ",[44,3814,3815],{},"sudo journalctl -u docker --since 1h -p err",[28,3817,3818],{},"Отфильтровать логи по времени и уровню критичности.",[28,3820,3821],{},"Сохранить релевантный фрагмент логов в файл для дальнейшего использования.",[28,3823,3824,3825,2081],{},"Понять, откуда брать логи для нового приложения (обычно это либо journalctl, либо файл в ",[44,3826,3827],{},"/var/log/\u003Cappname>/",[16,3829,2735],{"id":2734},[61,3831,3833],{"id":3832},"проблема-permission-denied-при-чтении-логов","Проблема: \"Permission denied\" при чтении логов",[21,3835,3836,3839,3840,924,3842,3844,3845,3847,3848,129,3851,3853,3854,3856,3857,2077,3860,3863],{},[76,3837,3838],{},"Причина:"," Вы запускаете команду без ",[44,3841,362],{},[76,3843,2749],{}," Всегда используйте ",[44,3846,362],{}," для чтения системных логов (",[44,3849,3850],{},"/var/log/*",[44,3852,2841],{},"). Если ",[44,3855,362],{}," недоступен, можно добавить пользователя в группу ",[44,3858,3859],{},"adm",[44,3861,3862],{},"sudo usermod -aG adm $USER","), но это требует перелогина.",[61,3865,3867],{"id":3866},"проблема-в-journalctl-пусто-или-нет-записей-за-определённый-период","Проблема: В journalctl пусто или нет записей за определённый период",[21,3869,3870,3873,3874,2813,3877,3880,3881,3884,3885,924,3888,3890,3891,562,3894,3897],{},[76,3871,3872],{},"Причина 1:"," Журнал мог быть очищен (",[44,3875,3876],{},"journalctl --vacuum-size",[76,3878,3879],{},"Причина 2:"," Слишком агрессивные настройки ",[44,3882,3883],{},"MaxRetentionSec"," в ",[44,3886,3887],{},"journald.conf",[76,3889,2749],{}," Проверьте настройки хранения. Для постоянного архивирования критичных логов настройте их дублирование в отдельный текстовый файл через конфигурацию службы (например, ",[44,3892,3893],{},"StandardOutput=syslog",[44,3895,3896],{},"file"," в юните systemd).",[61,3899,3901],{"id":3900},"проблема-слишком-много-данных-ничего-не-найти","Проблема: Слишком много данных, ничего не найти",[21,3903,3904,3906,3907,3909,3910,129,3913,3916,3917,3919,3920,3922,3923,1488,3926,181],{},[76,3905,3838],{}," Запрос слишком общий или уровень логирования слишком низкий (debug).\n",[76,3908,2749],{}," Усильте фильтрацию. Добавьте временные рамки (",[44,3911,3912],{},"--since",[44,3914,3915],{},"--until","), конкретную службу (",[44,3918,385],{},") и уровень (",[44,3921,393],{},"). Если нужно, временно повысьте уровень логирования для службы, чтобы увидеть детали, но помните о последующем возврате к ",[44,3924,3925],{},"info",[44,3927,3928],{},"warning",[61,3930,3932],{"id":3931},"проблема-логи-приложения-пишутся-в-неизвестное-место","Проблема: Логи приложения пишутся в неизвестное место",[21,3934,3935,3937,3938,3940,3941,3943,3944,3947,3948,3951,3952,562,3955,3957,3958,3961],{},[76,3936,3838],{}," Приложение может быть настроено на логирование в свой файл в ",[44,3939,3165],{}," или в стандартный вывод (stdout/stderr), который systemd перехватывает.\n",[76,3942,2749],{}," 1) Проверьте документацию приложения. 2) Найдите процесс (",[44,3945,3946],{},"ps aux | grep \u003Capp>",") и посмотрите его аргументы запуска. 3) Проверьте юниты systemd (",[44,3949,3950],{},"systemctl status \u003Capp>.service","), там может быть указан ",[44,3953,3954],{},"StandardOutput=journal",[44,3956,3896],{},". 4) Используйте ",[44,3959,3960],{},"sudo lsof -p \u003CPID> | grep log",", чтобы увидеть открытые файлы дескриптора процесса.",[1258,3963],{},[16,3965,3967],{"id":3966},"продвинутый-пример-поиск-причины-падения-сети","Продвинутый пример: поиск причины падения сети",[21,3969,3970],{},"Допустим, сеть периодически отключается.",[1170,3972,3973,3983,4048,4077,4113],{},[28,3974,3975,3978,3979,3982],{},[76,3976,3977],{},"Определите временное окно:"," Когда было последнее падение? (",[44,3980,3981],{},"uptime",", история команд).",[28,3984,3985,3988],{},[76,3986,3987],{},"Проверьте ядро и сетевые службы:",[80,3989,3991],{"className":82,"code":3990,"language":84,"meta":85,"style":85},"sudo journalctl -b -k | grep -i \"network\\|eth\\|link\"  # логи ядра за текущую загрузку\nsudo journalctl -u systemd-networkd --since \"2 hours ago\"\nsudo journalctl -u NetworkManager --since \"2 hours ago\"\n",[44,3992,3993,4017,4033],{"__ignoreMap":85},[89,3994,3995,3997,3999,4002,4005,4007,4009,4011,4014],{"class":91,"line":92},[89,3996,362],{"class":102},[89,3998,1153],{"class":105},[89,4000,4001],{"class":156}," -b",[89,4003,4004],{"class":156}," -k",[89,4006,210],{"class":209},[89,4008,213],{"class":102},[89,4010,414],{"class":156},[89,4012,4013],{"class":105}," \"network\\|eth\\|link\"",[89,4015,4016],{"class":95},"  # логи ядра за текущую загрузку\n",[89,4018,4019,4021,4023,4025,4028,4030],{"class":91,"line":99},[89,4020,362],{"class":102},[89,4022,1153],{"class":105},[89,4024,1156],{"class":156},[89,4026,4027],{"class":105}," systemd-networkd",[89,4029,3092],{"class":156},[89,4031,4032],{"class":105}," \"2 hours ago\"\n",[89,4034,4035,4037,4039,4041,4044,4046],{"class":91,"line":1008},[89,4036,362],{"class":102},[89,4038,1153],{"class":105},[89,4040,1156],{"class":156},[89,4042,4043],{"class":105}," NetworkManager",[89,4045,3092],{"class":156},[89,4047,4032],{"class":105},[28,4049,4050,4053],{},[76,4051,4052],{},"Проверьте аутентификацию (если проблема с SSH):",[80,4054,4056],{"className":82,"code":4055,"language":84,"meta":85,"style":85},"sudo grep \"Failed password\" /var/log/auth.log | tail -20\n",[44,4057,4058],{"__ignoreMap":85},[89,4059,4060,4062,4064,4067,4070,4072,4074],{"class":91,"line":92},[89,4061,362],{"class":102},[89,4063,213],{"class":105},[89,4065,4066],{"class":105}," \"Failed password\"",[89,4068,4069],{"class":105}," /var/log/auth.log",[89,4071,210],{"class":209},[89,4073,2159],{"class":102},[89,4075,4076],{"class":156}," -20\n",[28,4078,4079,4082],{},[76,4080,4081],{},"Проверьте системные сообщения:",[80,4083,4085],{"className":82,"code":4084,"language":84,"meta":85,"style":85},"sudo journalctl --since \"2 hours ago\" -p warning..err | grep -E \"(network|connection|timeout|reset)\"\n",[44,4086,4087],{"__ignoreMap":85},[89,4088,4089,4091,4093,4095,4098,4100,4103,4105,4107,4110],{"class":91,"line":92},[89,4090,362],{"class":102},[89,4092,1153],{"class":105},[89,4094,3092],{"class":156},[89,4096,4097],{"class":105}," \"2 hours ago\"",[89,4099,801],{"class":156},[89,4101,4102],{"class":105}," warning..err",[89,4104,210],{"class":209},[89,4106,213],{"class":102},[89,4108,4109],{"class":156}," -E",[89,4111,4112],{"class":105}," \"(network|connection|timeout|reset)\"\n",[28,4114,4115,4118,4119,4122],{},[76,4116,4117],{},"Сопоставьте с другими событиями:"," Возможно, падение совпадает с запуском другого сервиса (",[44,4120,4121],{},"sudo journalctl --since \"2 hours ago\" | grep \"Started\"","), ротацией логов или cron-задачей.",[16,4124,4126],{"id":4125},"заключение-не-добавляем-как-отдельный-заголовок","Заключение (не добавляем как отдельный заголовок)",[21,4128,4129,4130,47,4133,4135,4136,4138],{},"Анализ логов — это практический навык, который развивается с опытом. Начните с простых команд ",[44,4131,4132],{},"journalctl -u \u003Cservice> -f",[44,4134,193],{}," по ",[44,4137,3165],{},". Со временем вы научитесь быстро комбинировать фильтры, понимать типичные паттерны ошибок и проводить_root cause analysis_ (анализ первопричины). Помните: логи почти всегда говорят правду, если умеешь их читать.",[1588,4140,4141],{},"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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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}",{"title":85,"searchDepth":99,"depth":99,"links":4143},[4144,4145,4146,4149,4153,4161,4162,4166,4167,4173,4174],{"id":2027,"depth":99,"text":2028},{"id":2055,"depth":99,"text":2056},{"id":2987,"depth":99,"text":2988,"children":4147},[4148],{"id":2998,"depth":1008,"text":2999},{"id":3158,"depth":99,"text":3159,"children":4150},[4151,4152],{"id":3168,"depth":1008,"text":3169},{"id":3216,"depth":1008,"text":3217},{"id":3365,"depth":99,"text":3366,"children":4154},[4155,4157,4159],{"id":3372,"depth":1008,"text":4156},"awk — для извлечения полей",{"id":3454,"depth":1008,"text":4158},"less + поиск — для интерактивного изучения",{"id":3503,"depth":1008,"text":4160},"journalctl в качестве источника для других утилит",{"id":3605,"depth":99,"text":3606},{"id":3710,"depth":99,"text":3711,"children":4163},[4164,4165],{"id":3717,"depth":1008,"text":3718},{"id":3783,"depth":1008,"text":3784},{"id":2684,"depth":99,"text":2685},{"id":2734,"depth":99,"text":2735,"children":4168},[4169,4170,4171,4172],{"id":3832,"depth":1008,"text":3833},{"id":3866,"depth":1008,"text":3867},{"id":3900,"depth":1008,"text":3901},{"id":3931,"depth":1008,"text":3932},{"id":3966,"depth":99,"text":3967},{"id":4125,"depth":99,"text":4126},"2026-02-16 12:58:09","Узнайте, как находить и интерпретировать системные логи в Linux с помощью journalctl, grep и других инструментов. Пошаговая инструкция с примерами для Ubuntu, CentOS и других дистрибутивов.","easy","10-15 мин",[4180,4183,4186,4189],{"question":4181,"answer":4182},"Как посмотреть логи в реальном времени в Linux?","Используйте команду `journalctl -f` для логов systemd или `tail -f /var/log/syslog` для классических текстовых логов. Обе команды будут выводить новые записи по мере их появления.",{"question":4184,"answer":4185},"Почему у меня нет доступа к файлам в /var/log?","Большинство файлов логов принадлежит root. Используйте `sudo` для их чтения (например, `sudo cat /var/log/auth.log`). Если нужен постоянный доступ, добавьте пользователя в группу `adm`.",{"question":4187,"answer":4188},"Чем journalctl лучше обычных текстовых логов?","Journalctl собирает логи со всей системы в единый бинарный журнал с метаданными (время, процесс, уровень). Это позволяет сложную фильтрацию (`journalctl -u nginx --since today`), в отличие от простого `grep` по текстовым файлам.",{"question":4190,"answer":4191},"Как очистить журнал systemd, если он занял весь диск?","Ограничьте размер журнала: `sudo journalctl --vacuum-time=3d` (оставить 3 дня) или `sudo journalctl --vacuum-size=100M`. Также можно настроить политику хранения в `/etc/systemd/journald.conf`.",[4193,4196,4199,4202,4205],{"name":4194,"text":4195},"Определите источник проблемы","Сначала поймите, какая служба или компонент работает некорректно. Это сузит круг логов для анализа (например, nginx, sshd, kernel).",{"name":4197,"text":4198},"Изучите основные locations логов","Знайте ключевые пути: `/var/log/syslog` (общие системные события), `/var/log/auth.log` (аутентификация), `/var/log/kern.log` (ядро), `/var/log/nginx/` (логи веб-сервера). Для systemd используйте `journalctl`.",{"name":4200,"text":4201},"Освойте базовые команды фильтрации","Используйте `grep` для поиска по текстовым логам (например, `grep 'error' /var/log/syslog`). В journalctl применяйте флаги: `-u` (служба), `-p` (уровень критичности), `--since` (временной диапазон).",{"name":4203,"text":4204},"Анализируйте контекст ошибок","Найдите не только само сообщение об ошибке, но и записи за несколько секунд/минут до него. Часто причина скрыта в предшествующих событиях (например, 'failed to start' после 'permission denied').",{"name":4206,"text":4207},"Сохраните и структурируйте вывод","Перенаправляйте важные фрагменты в отдельный файл: `journalctl -u nginx --since '1 hour ago' > nginx_issues.log`. Добавляйте временные метки для последующего сравнения.","PT15M",[4210,4211,4212,4213,4214,4215,4216,4217,4218,4219],"анализ логов linux","где находятся логи в linux","journalctl команды","как читать логи linux","grep поиск по логам","системные логи ubuntu","log analysis linux tutorial","основы диагностики linux","/var/log папка","systemd journal",{},[4222,4223,4224],"/guides/linux/systemd-service-management","/guides/linux/cron-job-troubleshooting","/errors/linux/ssh-connection-refused",{"title":2951,"description":4176},"guides/linux/log-analysis-basics","Это руководство научит вас основным командам и методам анализа логов в Linux. Вы узнаете, где хранятся логи, как их читать, фильтровать и искать ошибки, чтобы быстрее диагностировать проблемы в системе.",[1680,4229,54,4230,84,2945,4231],"logs","debugging","monitoring","UhQ3AnNyCI99AGZulaKWQvbrri-LlQrW5YTveHmPLFg",{"id":4234,"title":4235,"appliesTo":4236,"author":11,"body":4238,"canonical":1628,"code":85,"createdAt":4853,"description":4854,"difficulty":4177,"draft":1632,"estimatedTime":4178,"extension":1634,"faq":4855,"howToSteps":4868,"howToTotalTime":4208,"image":1628,"keywords":4884,"locale":1677,"meta":4894,"navigation":1011,"path":1684,"platform":1680,"related":4895,"section":4898,"seo":4899,"severity":4900,"stem":4901,"summary":4902,"tags":4903,"twitterCreator":1628,"twitterSite":1628,"type":4908,"updatedAt":4853,"__hash__":4909},"content_ru/errors/linux/process-zombie.md","Зомби-процессы в Linux: как найти и устранить",[4237,2953,2954,8],"Linux 5.x+",{"type":13,"value":4239,"toc":4839},[4240,4244,4251,4263,4266,4270,4276,4286,4290,4293,4342,4346,4349,4353,4362,4420,4430,4434,4450,4510,4514,4527,4530,4553,4556,4579,4582,4586,4589,4633,4636,4681,4685,4688,4827,4829,4833,4836],[16,4241,4243],{"id":4242},"что-такое-зомби-процесс-в-linux","Что такое зомби-процесс в Linux",[21,4245,4246,4247,4250],{},"Зомби-процесс (zombie process) — это процесс, который уже завершил своё выполнение, но его запись остаётся в таблице процессов системы. Это происходит, когда родительский процесс не прочитал статус завершения дочернего процесса с помощью системного вызова ",[44,4248,4249],{},"wait()"," или его вариаций.",[21,4252,4253,4254,562,4256,4258,4259,4262],{},"В выводе команды ",[44,4255,1506],{},[44,4257,256],{}," такой процесс отображается с состоянием ",[44,4260,4261],{},"Z",". У зомби-процесса нет потребления процессорного времени или оперативной памяти, но он занимает запись в таблице процессов (и, следовательно, один из доступных идентификаторов процесса — PID).",[21,4264,4265],{},"Обычно зомби-процесс — это временное состояние, которое длится микросекунды. Однако если родительский процесс \"забыл\" о своём дочернем, зомби может оставаться в системе неопределённо долго.",[61,4267,4269],{"id":4268},"как-выглядит-ошибка","Как выглядит ошибка?",[80,4271,4274],{"className":4272,"code":4273,"language":1710},[2584],"$ ps aux | grep Z\nUSER       PID  %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND\nroot      1234   0.0  0.0      0     0 ?        Z    10:00   0:00 [defunct] \u003Cимя_процесса>\n",[44,4275,4273],{"__ignoreMap":85},[21,4277,4278,4279,4282,4283,4285],{},"Символ ",[44,4280,4281],{},"[defunct]"," в колонке ",[44,4284,138],{}," явно указывает на зомби-процесс.",[16,4287,4289],{"id":4288},"причины-возникновения","Причины возникновения",[21,4291,4292],{},"Зомби-процессы появляются по одной основной причине и нескольким косвенным:",[1170,4294,4295,4313,4323,4336],{},[28,4296,4297,4302,4303,4306,4307,562,4309,4312],{},[76,4298,4299,4300],{},"Родительский процесс не вызывает ",[44,4301,4249],{},". Это самая частая причина. После того как дочерний процесс завершается (например, через ",[44,4304,4305],{},"exit()","), ядро сохраняет информацию о его завершении (код возврата, использование ресурсов) в структуре процесса. Родитель должен прочитать эту информацию с помощью ",[44,4308,4249],{},[44,4310,4311],{},"waitpid()",". Если родитель этого не делает, запись дочернего процесса остаётся в таблице процессов как \"зомби\".",[28,4314,4315,4318,4319,4322],{},[76,4316,4317],{},"Родительский процесс \"завис\" или некорректно обрабатывает сигналы",". Если родительский процесс игнорирует сигнал ",[44,4320,4321],{},"SIGCHLD"," (который ядро отправляет при завершении ребёнка) или сам завершился, не дождавшись детей, это приводит к появлению зомби.",[28,4324,4325,4328,4329,4331,4332,4335],{},[76,4326,4327],{},"Ошибка в программе",". В коде родительского процесса может отсутствовать вызов ",[44,4330,4249],{}," после ",[44,4333,4334],{},"fork()",", или он может быть заблокирован на другом действии (например, на ожидании ввода-вывода).",[28,4337,4338,4341],{},[76,4339,4340],{},"Ошибка в системном скрипте или демоне",". Некоторые старые или некорректно написанные демоны могут создавать зомби при обработке запросов.",[16,4343,4345],{"id":4344},"способы-устранения-зомби-процессов","Способы устранения зомби-процессов",[21,4347,4348],{},"Поскольку зомби-процесс уже мёртв, его нельзя \"убить\". Единственный способ освободить запись в таблице процессов — заставить родительский процесс прочитать статус завершения. Если родитель не может или не хочет этого сделать, нужно завершить самого родителя.",[61,4350,4352],{"id":4351},"способ-1-отправить-сигнал-sigchld-родительскому-процессу","Способ 1: Отправить сигнал SIGCHLD родительскому процессу",[21,4354,4355,4356,4358,4359,4361],{},"Это самый аккуратный способ. Сигнал ",[44,4357,4321],{}," (сигнал о завершении потомка) может заставить родительский процесс, который его корректно обрабатывает, вызвать ",[44,4360,4249],{}," и \"подобрать\" зомби.",[1170,4363,4364,4369,4414],{},[28,4365,4366,4367,2081],{},"Найдите PID родительского процесса (PPID) зомби-процесса (из вывода ",[44,4368,1506],{},[28,4370,4371,4372,4393,4394],{},"Отправьте ему сигнал:\n",[80,4373,4375],{"className":82,"code":4374,"language":84,"meta":85,"style":85},"kill -SIGCHLD \u003CPPID>\n",[44,4376,4377],{"__ignoreMap":85},[89,4378,4379,4381,4384,4386,4389,4391],{"class":91,"line":92},[89,4380,50],{"class":156},[89,4382,4383],{"class":156}," -SIGCHLD",[89,4385,1302],{"class":209},[89,4387,4388],{"class":105},"PPI",[89,4390,1308],{"class":845},[89,4392,1387],{"class":209},"\nили просто:\n",[80,4395,4397],{"className":82,"code":4396,"language":84,"meta":85,"style":85},"kill -18 \u003CPPID>\n",[44,4398,4399],{"__ignoreMap":85},[89,4400,4401,4403,4406,4408,4410,4412],{"class":91,"line":92},[89,4402,50],{"class":156},[89,4404,4405],{"class":156}," -18",[89,4407,1302],{"class":209},[89,4409,4388],{"class":105},[89,4411,1308],{"class":845},[89,4413,1387],{"class":209},[28,4415,4416,4417,181],{},"Проверьте, исчез ли зомби: ",[44,4418,4419],{},"ps aux | grep 'Z'",[232,4421,4422],{},[21,4423,236,4424,4426,4427,4429],{},[76,4425,239],{}," Многие программы не имеют кастомного обработчика для ",[44,4428,4321],{}," по умолчанию. В таком случае ядро просто игнорирует этот сигнал, и зомби останется.",[61,4431,4433],{"id":4432},"способ-2-завершить-родительский-процесс","Способ 2: Завершить родительский процесс",[21,4435,4436,4437,4440,4441,4443,4444,4446,4447,4449],{},"Если сигнал не помог, самым надёжным способом является завершение родительского процесса. После этого зомби-процесс становится \"сиротой\" и наследуется специальным процессом ",[44,4438,4439],{},"init"," (с PID 1) или ",[44,4442,54],{}," (в современных системах). Процесс ",[44,4445,4439],{}," периодически выполняет ",[44,4448,4249],{}," для всех своих дочерних процессов, поэтому зомби будет автоматически собран.",[1170,4451,4452,4466,4507],{},[28,4453,4454,4455,4458,4459,129,4462,4465],{},"Убедитесь, что PID родителя (PPID) корректен и вы готовы его завершить. ",[76,4456,4457],{},"Внимание:"," завершение системного процесса (например, ",[44,4460,4461],{},"sshd",[44,4463,4464],{},"cron",") может привести к временной неработоспособности службы.",[28,4467,4468,4469,4486,4487],{},"Отправьте сигнал завершения:\n",[80,4470,4472],{"className":82,"code":4471,"language":84,"meta":85,"style":85},"kill \u003CPPID>\n",[44,4473,4474],{"__ignoreMap":85},[89,4475,4476,4478,4480,4482,4484],{"class":91,"line":92},[89,4477,50],{"class":156},[89,4479,1302],{"class":209},[89,4481,4388],{"class":105},[89,4483,1308],{"class":845},[89,4485,1387],{"class":209},"\nЕсли процесс не реагирует, используйте принудительное завершение:\n",[80,4488,4490],{"className":82,"code":4489,"language":84,"meta":85,"style":85},"kill -9 \u003CPPID>\n",[44,4491,4492],{"__ignoreMap":85},[89,4493,4494,4496,4499,4501,4503,4505],{"class":91,"line":92},[89,4495,50],{"class":156},[89,4497,4498],{"class":156}," -9",[89,4500,1302],{"class":209},[89,4502,4388],{"class":105},[89,4504,1308],{"class":845},[89,4506,1387],{"class":209},[28,4508,4509],{},"После завершения родителя проверьте список процессов. Зомби должен исчезнуть.",[61,4511,4513],{"id":4512},"способ-3-перезапуск-родительского-процесса-если-это-сервис","Способ 3: Перезапуск родительского процесса (если это сервис)",[21,4515,4516,4517,129,4520,129,4523,4526],{},"Если родительский процесс — это системный демон (например, ",[44,4518,4519],{},"apache2",[44,4521,4522],{},"nginx",[44,4524,4525],{},"mysql","), правильным решением будет его перезапуск через менеджер служб.",[21,4528,4529],{},"Для systemd:",[80,4531,4533],{"className":82,"code":4532,"language":84,"meta":85,"style":85},"sudo systemctl restart \u003Cимя_сервиса>\n",[44,4534,4535],{"__ignoreMap":85},[89,4536,4537,4539,4541,4543,4545,4548,4551],{"class":91,"line":92},[89,4538,362],{"class":102},[89,4540,1000],{"class":105},[89,4542,1052],{"class":105},[89,4544,1302],{"class":209},[89,4546,4547],{"class":105},"имя_сервис",[89,4549,4550],{"class":845},"а",[89,4552,1387],{"class":209},[21,4554,4555],{},"Для SysVinit (старые системы):",[80,4557,4559],{"className":82,"code":4558,"language":84,"meta":85,"style":85},"sudo service \u003Cимя_сервиса> restart\n",[44,4560,4561],{"__ignoreMap":85},[89,4562,4563,4565,4568,4570,4572,4574,4576],{"class":91,"line":92},[89,4564,362],{"class":102},[89,4566,4567],{"class":105}," service",[89,4569,1302],{"class":209},[89,4571,4547],{"class":105},[89,4573,4550],{"class":845},[89,4575,1311],{"class":209},[89,4577,4578],{"class":105}," restart\n",[21,4580,4581],{},"Перезапуск службы гарантирует, что новый экземпляр процесса-родителя начнёт корректно управлять своими дочерними процессами.",[61,4583,4585],{"id":4584},"способ-4-отладка-и-исправление-исходного-кода-для-разработчиков","Способ 4: Отладка и исправление исходного кода (для разработчиков)",[21,4587,4588],{},"Если зомби-процессы постоянно появляются в вашем собственном приложении, необходимо исправить его код.",[1170,4590,4591,4596,4607],{},[28,4592,4593,4594,181],{},"Найдите в коде родительского процесса места после ",[44,4595,4334],{},[28,4597,4598,4599,4601,4602,562,4604,4606],{},"Убедитесь, что сразу после ",[44,4600,4334],{}," в родительской ветке есть вызов ",[44,4603,4249],{},[44,4605,4311],{}," для сбора статуса дочернего процесса.",[28,4608,4609,4610],{},"Если родитель должен работать параллельно с дочерним процессом, необходимо:\n",[25,4611,4612,4624,4630],{},[28,4613,4614,4615,4617,4618,562,4621,181],{},"Установить обработчик сигнала ",[44,4616,4321],{}," с помощью ",[44,4619,4620],{},"signal()",[44,4622,4623],{},"sigaction()",[28,4625,4626,4627,4629],{},"Внутри обработчика вызывать ",[44,4628,4311],{}," в цикле (чтобы собрать всех завершившихся детей).",[28,4631,4632],{},"Или периодически (неблокирующим вызовом) проверять наличие завершившихся детей.",[21,4634,4635],{},"Пример корректного обработчика на C:",[80,4637,4641],{"className":4638,"code":4639,"language":4640,"meta":85,"style":85},"language-c shiki shiki-themes github-light github-dark","#include \u003Csys/wait.h>\n#include \u003Csignal.h>\n\nvoid sigchld_handler(int s) {\n    while (waitpid(-1, NULL, WNOHANG) > 0);\n}\n\n// В main(): signal(SIGCHLD, sigchld_handler);\n","c",[44,4642,4643,4648,4653,4657,4662,4667,4672,4676],{"__ignoreMap":85},[89,4644,4645],{"class":91,"line":92},[89,4646,4647],{},"#include \u003Csys/wait.h>\n",[89,4649,4650],{"class":91,"line":99},[89,4651,4652],{},"#include \u003Csignal.h>\n",[89,4654,4655],{"class":91,"line":1008},[89,4656,1012],{"emptyLinePlaceholder":1011},[89,4658,4659],{"class":91,"line":1015},[89,4660,4661],{},"void sigchld_handler(int s) {\n",[89,4663,4664],{"class":91,"line":1021},[89,4665,4666],{},"    while (waitpid(-1, NULL, WNOHANG) > 0);\n",[89,4668,4669],{"class":91,"line":1033},[89,4670,4671],{},"}\n",[89,4673,4674],{"class":91,"line":1045},[89,4675,1012],{"emptyLinePlaceholder":1011},[89,4677,4678],{"class":91,"line":1061},[89,4679,4680],{},"// В main(): signal(SIGCHLD, sigchld_handler);\n",[16,4682,4684],{"id":4683},"профилактика","Профилактика",[21,4686,4687],{},"Чтобы избежать накопления зомби-процессов в будущем:",[1170,4689,4690,4699,4731],{},[28,4691,4692,4695,4696,4698],{},[76,4693,4694],{},"Для системных администраторов",": Регулярно проверяйте список процессов на наличие зомби (",[44,4697,4419],{},"), особенно после запуска/останова критичных служб. Если зомби появляются из-за конкретного демона, ищите обновления для этого ПО или сообщайте баг разработчикам.",[28,4700,4701,273,4704],{},[76,4702,4703],{},"Для разработчиков",[25,4705,4706,4714,4721],{},[28,4707,4708,4709,4711,4712,181],{},"Всегда обрабатывайте сигнал ",[44,4710,4321],{}," в родительских процессах, которые создают дочерние через ",[44,4713,4334],{},[28,4715,4716,4717,4720],{},"Используйте неблокирующий вызов ",[44,4718,4719],{},"waitpid(-1, &status, WNOHANG)"," в цикле внутри обработчика, чтобы собрать всех завершившихся детей.",[28,4722,4723,4724,4727,4728,181],{},"Рассмотрите возможность использования более высокоуровневых конструкций (например, ",[44,4725,4726],{},"subprocess"," в Python, который автоматически собирает статусы) вместо прямого ",[44,4729,4730],{},"fork/exec",[28,4732,4733,4736,4737],{},[76,4734,4735],{},"Мониторинг",": Настройте простой скрипт для мониторинга количества зомби-процессов и оповещения, если их число превышает, например, 10.",[80,4738,4740],{"className":82,"code":4739,"language":84,"meta":85,"style":85},"#!/bin/bash\nZOMBIE_COUNT=$(ps aux | grep -c ' Z ')\nif [ \"$ZOMBIE_COUNT\" -gt 10 ]; then\n    echo \"Внимание: обнаружено $ZOMBIE_COUNT зомби-процессов!\" | wall\n    # Можно также добавить отправку email или вызов pagerduty\nfi\n",[44,4741,4742,4746,4771,4799,4817,4822],{"__ignoreMap":85},[89,4743,4744],{"class":91,"line":92},[89,4745,2104],{"class":95},[89,4747,4748,4751,4753,4755,4757,4759,4761,4763,4766,4769],{"class":91,"line":99},[89,4749,4750],{"class":845},"ZOMBIE_COUNT",[89,4752,2131],{"class":209},[89,4754,2134],{"class":845},[89,4756,46],{"class":102},[89,4758,206],{"class":105},[89,4760,210],{"class":209},[89,4762,213],{"class":102},[89,4764,4765],{"class":156}," -c",[89,4767,4768],{"class":105}," ' Z '",[89,4770,2143],{"class":845},[89,4772,4773,4776,4779,4782,4785,4787,4790,4793,4796],{"class":91,"line":1008},[89,4774,4775],{"class":209},"if",[89,4777,4778],{"class":845}," [ ",[89,4780,4781],{"class":105},"\"",[89,4783,4784],{"class":845},"$ZOMBIE_COUNT",[89,4786,4781],{"class":105},[89,4788,4789],{"class":209}," -gt",[89,4791,4792],{"class":156}," 10",[89,4794,4795],{"class":845}," ]; ",[89,4797,4798],{"class":209},"then\n",[89,4800,4801,4804,4807,4809,4812,4814],{"class":91,"line":1015},[89,4802,4803],{"class":156},"    echo",[89,4805,4806],{"class":105}," \"Внимание: обнаружено ",[89,4808,4784],{"class":845},[89,4810,4811],{"class":105}," зомби-процессов!\"",[89,4813,210],{"class":209},[89,4815,4816],{"class":102}," wall\n",[89,4818,4819],{"class":91,"line":1021},[89,4820,4821],{"class":95},"    # Можно также добавить отправку email или вызов pagerduty\n",[89,4823,4824],{"class":91,"line":1033},[89,4825,4826],{"class":209},"fi\n",[1258,4828],{},[16,4830,4832],{"id":4831},"заключение","Заключение",[21,4834,4835],{},"Зомби-процессы в Linux — это в основном следствие ошибок в родительских программах, а не критичная системная проблема. Они не потребляют значительных ресурсов, но их накопление указывает на некорректно работающий софт. В большинстве случаев достаточно завершить родительский процесс зомби, после чего ядро само очистит его запись. Для постоянного решения проблемы разработчикам необходимо исправлять код, а администраторам — следить за состоянием служб и обновлять ПО.",[1588,4837,4838],{},"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 pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":85,"searchDepth":99,"depth":99,"links":4840},[4841,4844,4845,4851,4852],{"id":4242,"depth":99,"text":4243,"children":4842},[4843],{"id":4268,"depth":1008,"text":4269},{"id":4288,"depth":99,"text":4289},{"id":4344,"depth":99,"text":4345,"children":4846},[4847,4848,4849,4850],{"id":4351,"depth":1008,"text":4352},{"id":4432,"depth":1008,"text":4433},{"id":4512,"depth":1008,"text":4513},{"id":4584,"depth":1008,"text":4585},{"id":4683,"depth":99,"text":4684},{"id":4831,"depth":99,"text":4832},"2026-02-16 18:33:58","Узнайте, что такое зомби-процессы в Linux, почему они появляются и как их безопасно удалить. Пошаговая инструкция с командами для диагностики и устранения.",[4856,4859,4862,4865],{"question":4857,"answer":4858},"Чем зомби-процесс отличается от сиротского (orphan)?","Зомби-процесс (Z) уже завершил выполнение, но его запись остаётся в таблице процессов, так как родитель не прочитал его статус. Сирота — это процесс, чей родитель завершился, и он был усыновлён init-процессом (PID 1).",{"question":4860,"answer":4861},"Могут ли зомби-процессы нагружать систему?","Нет, сами по себе они не потребляют CPU или память, но занимают запись в таблице процессов. Большое количество зомби (тысячи) может исчерпать лимит PID, мешая запуску новых процессов.",{"question":4863,"answer":4864},"Как предотвратить появление зомби-процессов?","В программах на C/C++ и других языках необходимо корректно обрабатывать сигнал SIGCHLD или использовать системный вызов wait/waitpid в родительском процессе после fork().",{"question":4866,"answer":4867},"Почему команда kill -9 не работает на зомби?","Зомби-процесс уже завершён ядром, его нет в памяти. Сигнал kill может быть отправлен только живым процессам. Убрать зомби можно, только завершив его родительский процесс.",[4869,4872,4875,4878,4881],{"name":4870,"text":4871},"Определите зомби-процессы","Используйте команду `ps aux` или `top` и найдите процессы в состоянии 'Z' (зомби). Обратите внимание на PPID (PID родителя).",{"name":4873,"text":4874},"Убедитесь, что родительский процесс существует","Найдите родительский процесс (PPID) через `ps -p \u003CPPID>`. Если его нет, значит, он уже завершился, и зомби должен быть автоматически собран init-процессом (PID 1).",{"name":4876,"text":4877},"Отправьте сигнал SIGCHLD родителю","Если родитель жив, попробуйте отправить ему сигнал SIGCHLD: `kill -SIGCHLD \u003CPPID>`. Это может побудить его корректно завершить дочерний процесс.",{"name":4879,"text":4880},"Завершите родительский процесс (осторожно)","Если сигнал не помог, завершите родительский процесс: `kill \u003CPPID>`. После этого зомби-процесс станет сиротой и будет автоматически собран init-процессом (PID 1).",{"name":4882,"text":4883},"Проверьте результат","Снова выполните `ps aux | grep 'Z'`. Зомби-процесс должен исчезнуть из списка.",[4885,4886,4887,4888,4889,4890,4891,1669,4892,4893],"зомби процесс linux","как убрать зомби процесс","ps aux зомби","zombie process linux","убить зомби процесс","ошибка состояние Z linux","системные процессы linux","wait системный вызов","сигнал SIGCHLD",{},[1679,4896,4897],"/errors/linux/process-kill-fail","/guides/linux/systemd-service-failed","Ошибки Linux",{"title":4235,"description":4854},"low","errors/linux/process-zombie","Статья объясняет природу зомби-процессов в Linux и предоставляет практические методы их устранения. Вы научитесь находить зомби-процессы и применять правильные команды для очистки системы.",[4904,1680,4905,2945,4906,4907,84],"процессы","zombie process","ошибка","terminal","error","pJFIhOXScOs92oZ2q0OSMTh9AnWYTW2aTehPcKvfrvw"]