Що саме таке "стоп-завдання", як у "Зупинилася робота ..."?


29

Після видачі команди відключення іноді надходить повідомлення про стан, як це:

A stop job is running for Session 1 of user xy

а потім система зависає на деякий час або назавжди залежно від ???

То що ж таке "стоп-робота"?

Крім того, чому іноді він досить точно оцінює час, який знадобиться, і в інші часи він може тривати назавжди?


2
Може бути, слід припинити роботу? Сеанс припинив завдання, які насправді не запущені, і тому немає можливості реагувати на сигнали припинення.
Каз

Оболонка налагодження F9, зібрана повідомленням "зупинити роботу"? видалити cylon
dotbit

Відповіді:


28

systemd функціонує внутрішньо з точки зору черги "робочих місць". Кожна робота (трохи спрощена) - це дія, яку потрібно здійснити: зупинити, перевірити, запустити або перезапустити певний блок .

Коли (наприклад) ви доручаєте systemd запускати сервісний блок , він розробляє перелік зупинок і запуску завдань для будь-яких блоків (сервісних блоків, блоків монтажу, блоків пристроїв тощо), необхідних для досягнення цієї мети, відповідно до Одиничні вимоги та залежності, упорядковує їх, відповідно до впорядкованих взаємозв'язків, розробляє і (якщо можливо) фіксує будь-які суперечності та (якщо цей останній крок є успішним) ставить їх у чергу.

Потім він намагається виконувати завойовані "завдання".

Завдання зупинки виконується для сесії 1 користувача xy

Блок псевдонім тут Session 1 of user xy. Це буде (від відображуваної назви) сеансовий блок, а не блок обслуговування . Це абстракція сеансу входу в простір користувачів, яка підтримується програмою systemd logindта її плагінами PAM. Це (по суті і теоретично) групування всіх процесів, які цей користувач десь працює як "сеанс входу".

Робота, яка була започаткована проти неї, - це stop. І це, ймовірно , займає багато часу , тому що Systemd люди помилково сплавлені сеанс зависання сеансу , вимикання . Вони порушують перше, щоб змусити останнього працювати, і у відповідь деякі люди змінюють систему, щоб зламати останню, щоб змусити перших працювати. Системні люди дійсно повинні визнати, що це дві різні речі.

У SIGTERMході сеансу входу у вас є щось, що ігнорується або що потребує тривалого часу, щоб закінчитися після його побачення SIGTERM. Як не дивно, колишня поведінка деяких снарядів, що контролюють роботу. Правильний спосіб припинити входу лідерів сесії , коли вони ці конкретні завдання, контрольні оболонки, щоб сказати їм , що сесія була повісила , після чого вони завершуються всі свої робочі місця (інший вид роботи на внутрішню Systemd роботу) , а потім припиняють себе.

Що насправді відбувається, це те, що systemd чекає часу очікування зупинки пристрою, поки не вдасться SIGKILL. Цей час очікування може бути налаштований на одиницю, звичайно, і його можна встановити так, щоб ніколи не виходив час. Отже, чому потенційно можна побачити різні форми поведінки.

Подальше читання


1
Відповідно до цієї відповіді, unix.stackexchange.com/a/297318/224025 ми можемо змінити цей час. Чи було б це безпечно (чи це завдасть шкоди), якщо я зміню його на нульові секунди?
GypsyCosmonaut

1
Насправді, заключний параграф цієї відповіді та посібник користувача, на який я вказую вас для подальшого читання, вже розповідають про зміну таймауту. Питання про те, що означає тайм-аут 0s та чи безпечно його використовувати, слід задавати як запитання на тему " Як задати питання", оскільки це додаткове запитання до питання про те, що таке "зупинка роботи" і чому час очікування змінюється. Я підозрюю, що це може бути хорошим.
JdeBP

2

Ці повідомлення надходять із systemd, що є системою init, яка запускає та зупиняє завдання. Робота може бути демоном, але також може мати невеликі завдання, такі як встановлення та демонтаж дисків, видалення / tmp або збереження та відновлення яскравості екрана під час завантаження. systemctl list-unitsдає вам ідею. Сидд використовує "блок" і "робота", щоб означати майже те саме.

Коли робота припиняється, як і systemctl stop ...колись, тоді виникає питання, як довго чекати завершення завдання, перш ніж оголосити про помилку та вбити процеси роботи SIGKILLсигналом. Ми насправді не хочемо використовувати, SIGKILLякщо не потрібно, оскільки це не дає можливості чистому виходу з процесу. Для деяких процесів на кілька секунд може бути достатньо часу, щоб оголосити про помилку, для інших процесів, таких як база даних, може бути значне мережеве та дискове введення / виведення для того, щоб робота чисто зупинилася, і тому ми можемо дати цим блокам кілька хвилин, щоб вони чисто вимикалися. .

Те, що ви бачите при відключенні, еквівалент systemctl stop $UNIT_NAMEтому, що потрібно запустити деякий час. Існує лічильник, який показує минулі секунди та максимальний час очікування до видачі SIGKILL і відключення триває незалежно.

Якщо немає вагомих причин очікувати тривалої затримки, це зазвичай свідчить про певну несправність. Це може варіюватися від сервера DHCP, який не відповідає на Release, і, таким чином, дія Release потребує тайм-ауту, або якась помилка, що призводить до того, що демон ніколи не вийде.


"Systemd використовує" unit "і" job ", щоб означати майже те саме." Я не думаю, що це правда: грубо кажучи, "робота" - це прохання зробити щось "підрозділу". Детальніше див. У відповіді @ JdeBP.
Томас

1

Деяка служба застрягла, і systemd очікує її виходу. Мабуть, Systemd точно не оцінює час, який це займе, час (як правило, 90 секунд), скільки часу буде чекати systemd, перш ніж у нього закінчиться терпіння. Дивіться цю публікацію:

Завдання зупинки виконується для сесії c2 користувача


6
Як я можу зрозуміти, яка служба висить?
naitsirch

-1

"Зупинити роботу" - це коли systemdчекає, коли певна "робота" припиниться, наприклад, якийсь процес, який він очікує завершити, перш ніж продовжувати роботу вперед. Якщо ви побачите попереджувальне повідомлення про те, що "зупиняється робота ..." (тощо) технічно це означає, що щось чекає в черзі завдань.

Однак перед тим, як перекопати всю вашу системну чергу черги, майте на увазі, що іноді ці попереджувальні повідомлення є непрямим результатом від факторів навколишнього середовища (насправді це повідомлення навіть посилається на їх репортаж GitHub як можливий помилку).

Наприклад: ми отримували повідомлення, пов’язані з "зупинкою роботи", і не могли зрозуміти, чому .... виявляється, диск майже не мав місця, і він почав змушувати ОС вести себе дивно.

Оновлення сервера до більшого диска та перезавантаження його виправлено;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.