Skip to content

Commit 76a72f9

Browse files
committed
make *arr service wait for postgresql role to exist
1 parent ca0854b commit 76a72f9

3 files changed

Lines changed: 16 additions & 26 deletions

File tree

modules/arr-common/hostConfigService.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ serviceName: serviceConfig:
77
with lib; {
88
description = "Configure ${serviceName} via API";
99
after = ["${serviceName}.service"];
10-
requires = ["${serviceName}.service"];
1110
wantedBy = ["multi-user.target"];
1211

1312
serviceConfig = {

modules/arr-common/mkArrServiceModule.nix

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -173,40 +173,30 @@ in {
173173

174174
systemd.services =
175175
{
176-
# Service that waits for PostgreSQL and this service's database to be ready
177-
"${serviceName}-wait-for-db" = mkIf config.services.postgresql.enable {
178-
description = "Wait for ${capitalizedName} PostgreSQL database to be ready";
179-
after = ["postgresql.service" "postgresql-setup.service"];
180-
requires = ["postgresql.service" "postgresql-setup.service"];
181-
wantedBy = ["multi-user.target"];
182-
183-
serviceConfig = {
184-
Type = "oneshot";
185-
RemainAfterExit = true;
186-
Restart = "on-failure";
187-
RestartSec = "2s";
188-
StartLimitBurst = 15;
189-
StartLimitIntervalSec = "60s";
190-
};
191-
192-
script = ''
193-
# Try to connect as the service user and run a simple query
194-
${pkgs.postgresql}/bin/psql -U ${cfg.user} -h /run/postgresql -d ${cfg.user} -c "SELECT 1;" > /dev/null
195-
echo "${capitalizedName} PostgreSQL database is ready"
196-
'';
197-
};
198-
199176
# Ensure main service (radarr.service, etc.) starts after
200177
# directories are created and configured dependencies
201178
${serviceName} = {
202179
after =
203180
["nixflix-setup-dirs.service"]
204-
++ (optional config.services.postgresql.enable "${serviceName}-wait-for-db.service")
181+
++ (optional config.services.postgresql.enable "postgresql-setup.service")
205182
++ (optional config.nixflix.mullvad.enable "mullvad-config.service");
206183
requires =
207184
["nixflix-setup-dirs.service"]
208-
++ (optional config.services.postgresql.enable "${serviceName}-wait-for-db.service");
185+
++ (optional config.services.postgresql.enable "postgresql-setup.service");
209186
wants = optional config.nixflix.mullvad.enable "mullvad-config.service";
187+
188+
# Wait for PostgreSQL role to be ready before starting
189+
serviceConfig = mkIf config.services.postgresql.enable {
190+
ExecStartPre = pkgs.writeShellScript "${serviceName}-wait-for-postgres" ''
191+
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
192+
${pkgs.postgresql}/bin/pg_isready -h /run/postgresql && \
193+
${pkgs.postgresql}/bin/psql -h /run/postgresql -U postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${cfg.user}';" | grep -q 1 && exit 0
194+
sleep 1
195+
done
196+
echo "PostgreSQL role ${cfg.user} not available" >&2
197+
exit 1
198+
'';
199+
};
210200
};
211201
}
212202
# Only create config and rootfolders services if apiKeyPath is configured

modules/prowlarr/indexersService.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ serviceName: serviceConfig:
77
with lib; {
88
description = "Configure ${serviceName} indexers via API";
99
after = ["${serviceName}-config.service"];
10+
requires = ["${serviceName}-config.service"];
1011
wantedBy = ["multi-user.target"];
1112

1213
serviceConfig = {

0 commit comments

Comments
 (0)