diff --git a/index.ts b/index.ts index 1411949..11f4c33 100644 --- a/index.ts +++ b/index.ts @@ -127,7 +127,7 @@ program const spinner = ora(`Starting instance '${name}'...`).start(); try { - await instanceManager.startInstance(name); + await instanceManager.startInstanceWithService(name); spinner.succeed(`Instance '${name}' started successfully`); const config = await instanceManager.getInstanceStatus(name); @@ -154,7 +154,7 @@ program const spinner = ora(`Stopping instance '${name}'...`).start(); try { - await instanceManager.stopInstance(name); + await instanceManager.stopInstanceWithService(name); spinner.succeed(`Instance '${name}' stopped successfully`); } catch (error) { diff --git a/src/instance/manager.ts b/src/instance/manager.ts index b11ba8a..9312ab9 100644 --- a/src/instance/manager.ts +++ b/src/instance/manager.ts @@ -150,12 +150,12 @@ export class InstanceManager { } if (config.status?.state === 'running') { - await this.stopInstance(name); + await this.stopInstanceWithService(name); // Wait a moment for cleanup await new Promise(resolve => setTimeout(resolve, 2000)); } - await this.startInstance(name); + await this.startInstanceWithService(name); } async getInstanceStatus(name: string): Promise { diff --git a/src/service/manager.ts b/src/service/manager.ts index 23d308d..763f0d5 100644 --- a/src/service/manager.ts +++ b/src/service/manager.ts @@ -205,6 +205,9 @@ export class ServiceManager { const restartSec = config.spec.service?.restartSec || 5; const user = useUserService ? process.env.USER || 'postgres' : 'postgres'; + // Generate socket directory path from data directory + const socketDir = join(config.spec.storage.dataDirectory, 'sockets'); + return `[Unit] Description=PostgreSQL database server for ${config.metadata.name} Documentation=man:postgres(1) @@ -212,13 +215,15 @@ After=network.target Wants=network.target [Service] -Type=forking +Type=notify User=${user} -ExecStart=${postgresPath} -D ${config.spec.storage.dataDirectory} +ExecStart=${postgresPath} -D ${config.spec.storage.dataDirectory} -k ${socketDir} -p ${config.spec.network.port} ExecReload=/bin/kill -HUP $MAINPID +ExecStop=/bin/kill -TERM $MAINPID KillMode=mixed KillSignal=SIGINT -TimeoutSec=0 +TimeoutSec=120 +TimeoutStopSec=120 # Restart policy Restart=${restartPolicy}