Systemd, похоже, не учитывает зависимость After=?
У меня есть сервер PostgreSQL () и базовый сценарий оболочки (который запускается для предоставления некоторых утверждений в базе данных третьему сервису (Mobilizon).
Поэтому, естественно, настроена зависимость для:
# systemctl show mobilizon-postgresql.service | grep After=
After=basic.target system.slice systemd-journald.socket sysinit.target postgresql.service
Хотя после перенастройки системы (которая не затронула эти зависимости) я наблюдаю в логах следующее поведение:
1677672119.103035 myserver systemd[1]: Starting Mobilizon PostgreSQL setup...
...
1677672119.153192 myserver systemd[1]: Starting PostgreSQL Server...
Так,mobilizon-postgresql.service
запускается до запуска .
1677672119.279742 myserver mobilizon-postgresql-start[329444]: psql: error: could not connect to server: No such file or directory
1677672119.279742 myserver mobilizon-postgresql-start[329444]: Is the server running locally and accepting
1677672119.279742 myserver mobilizon-postgresql-start[329444]: connections on Unix domain socket "/run/postgresql/.s.PGSQL.543>
1677672119.283558 myserver systemd[1]: mobilizon-postgresql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
1677672119.283707 myserver systemd[1]: mobilizon-postgresql.service: Failed with result 'exit-code'.
1677672119.289678 myserver systemd[1]: Failed to start Mobilizon PostgreSQL setup.
Так что, конечно,mobilizon.postgresql
не могу настроить соединение с БД.
1677672119.503881 myserver postgres[329458]: [329458] LOG: starting PostgreSQL 13.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11>
1677672119.512541 myserver postgres[329458]: [329458] LOG: listening on IPv4 address "0.0.0.0", port 5432
1677672119.512863 myserver postgres[329458]: [329458] LOG: listening on IPv6 address "::", port 5432
1677672119.519498 myserver postgres[329458]: [329458] LOG: listening on Unix socket "/run/postgresql/.s.PGSQL.5432"
...
1677672119.871989 myserver systemd[1]: Started PostgreSQL Server.
Лишь позднееpostgresql.service
Сообщается, что он полностью запущен.
Такое поведение полностью противоречит моему пониманиюAfter=
. Отsystemd.unit(5)
:
Если модуль foo.service содержит настройку Before=bar.service и оба модуля запускаются, запуск bar.service откладывается до тех пор, пока foo.service не завершит запуск.
У меня здесь неправильные предположения?
Версия Systemd — 251.12, дистрибутив — NixOS 22.11.