Назад | Перейти на главную страницу

Получить текущее состояние systemd

Как мы можем узнать, завершила ли systemd загрузка системы?

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

#!/bin/sh
$STATE=`HERE ADD THE MISSING PART`
if [ $STATE != "active" ]; then
  exit
fi
# Actions to do on next cron after booting

Если он также может предоставить мне информацию о процессе завершения работы, поскольку проблема может быть такой же ..;

Я делал это с SystemV с уровень выполнения команда, но Systemd не меняет уровень запуска в конце загрузки.

Спасибо

Вы можете проверить цель, которая должна быть активной для запуска вашего скрипта. Например, чтобы сеть была доступна, нужно проверить network-online.target (systemctl check вернет 0, если проверенный блок активен)

Целевая система, которую пытается достичь systemd, является целью "по умолчанию", которую может запросить systemctl get-default. Если эта цель находится в сети, система завершила загрузку (так что вы можете systemctl status $(systemctl get-default) чтобы проверить, завершился ли процесс загрузки)

Редактировать: Если вы хотите отслеживать только текущее состояние системы, и вас не интересуют цели (т.е. вы хотите запускать свою команду только тогда, когда все запущен и работает), лучше использовать systemctl is-system-running команда. Он выведет running все в порядке, или degraded если система работает, но некоторые службы не работают (что может указывать или не указывать на ошибку). Другие состояния будут указывать на то, что ваш скрипт не должен запускаться. В качестве побочного примечания, обычно лучше проверять возвращаемые значения вместо синтаксического анализа текстового вывода, но на странице руководства не указываются возвращаемые значения, а только говорится, что все, кроме «выполнения» результатов ненулевого кода выхода, поэтому может быть безопаснее для анализа выходного текста.

См. Справочную страницу systemctl для возможных выходных значений.