Вопрос или проблема
Я имею в виду следующее сообщение:
A start job is running for Get IMEI (33s / 3min 16s)
Моя задача занимает около 40 секунд. Через 33 секунды я начинаю получать сообщения в консоли. Это ожидаемо, поэтому я не хочу видеть это сообщение.
Это раздел Service моего файла службы systemd:
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/libexec/mfg-get-eeprom/getimei.sh
TimeoutSec=180s
Если параметр службы отсутствует, существует ли системный параметр, который заставит его дольше ждать перед выводом сообщений?
Ответ или решение
Консольные сообщения, при которых указываются данные о запусках служб типа "A start job is running for Get IMEI (33s / 3min 16s)" — это предусмотренная функциональность systemd, которая предоставляет информацию пользователям о состоянии процессов и времени их выполнения. Однако, в случаях, когда данный период времени ожидаем и не требует вмешательства, такие сообщения могут быть нежелательными или отвлечениями. Поэтому понимание того, как можно минимизировать подобные уведомления, особенно для однократных служб (Type=oneshot), может улучшить ваше взаимодействие с системой.
Теория: systemd отображает эти сообщения с целью информирования о запущенных процессах, которые могут занимать время, превышающее определенные лимиты. В свежей установке systemd, если служба выполняется дольше некоторых пороговых значений, консоль автоматически начнет выводить сообщения о статусе этой службы. Выражение «start job» автоматически является стандартной практикой, предназначенной обеспечить, чтобы пользователи не оставались в недоумении относительно состояния неопределенных процессов.
Пример: В вашей службе script "getimei.sh" запускается с TimeoutSec=180s и фактически исполняется около 40 секунд. Хотя сама длительность выполнения процесса не превышает выставленный предел, уведомления на консоли начинают появляться спустя 33 секунды, что может быть не всегда желанным. Данный интервал связан с изначальными настройками systemd и может быть отрегулирован.
Применение: Есть несколько возможных подходов к решению этой задачи с целью уменьшения появления таких сообщений:
-
Настройка
StartLimitInterval
,StartLimitBurst
в unit-файле: Хотя эти параметры изначально относятся к ограничениям для попыток перезапуска услуг, корректировка значений в [Unit] секции иногда может влиять на урегулирование задержек уведомлений:[Unit] StartLimitInterval=0 StartLimitBurst=0
-
Изменение глобальных параметров systemd: Возможность задания порога для отображения уведомлений на уровне всей системы может быть осуществлена через включение режима тишины. Для этого отредактируйте файл конфигурации systemd —
system.conf
или добавьте изменения в его включение черезsystemctl daemon-reexec
:[Manager] DefaultTimeoutStartSec=0
Параметр
DefaultTimeoutStartSec
задает глобальную настройку времени ожидания начала услуг перед выдачей сообщений. -
Изменение параметров консольного log уровня: Измените серверные параметры логирования systemd, установив аналогичное системное переменную среды – SYSTEMD_LOG_LEVEL, чтобы временно снизить отображение уровня сообщений. При этом используйте командную строку или системные скрипты:
export SYSTEMD_LOG_LEVEL=notice
-
Обновление ExecStart и script: Используйте внутри скрипта функции, которые бы могли выполнять указанный этап исполнения в фоновом режиме, тем самым снижая вероятность вывода этих сообщений.
Постоянная урегулировка тревожных или ненужных консольных сообщений может быть необходима для профессионалов IT, особенно в среде производства, где оптимизация вывода имеет критическое значение. Учитывая вышеуказанные методы, вы сможете эффективно минимизировать отвлекающие сообщения и поддерживать вашу рабочую среду в более чистом и сконцентрированном состоянии. Помните, что любые изменения в systemd требуют предостережения и проверок, чтобы избежать непредвиденных последствий.