Как мы можем узнать, завершила ли 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
для возможных выходных значений.