@@ -173,16 +173,39 @@ 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+
176199 # Ensure main service (radarr.service, etc.) starts after
177200 # directories are created and configured dependencies
178201 ${ serviceName } = {
179202 after =
180203 [ "nixflix-setup-dirs.service" ]
181- ++ ( optional config . services . postgresql . enable "postgresql-setup .service" )
204+ ++ ( optional config . services . postgresql . enable "${ serviceName } -wait-for-db .service" )
182205 ++ ( optional config . nixflix . mullvad . enable "mullvad-config.service" ) ;
183206 requires =
184207 [ "nixflix-setup-dirs.service" ]
185- ++ ( optional config . services . postgresql . enable "postgresql-setup .service" ) ;
208+ ++ ( optional config . services . postgresql . enable "${ serviceName } -wait-for-db .service" ) ;
186209 wants = optional config . nixflix . mullvad . enable "mullvad-config.service" ;
187210 } ;
188211 }
0 commit comments