--- name: systemd_generate_unit kind: function lang: go domain: infra version: "1.0.0" purity: pure signature: "func SystemdGenerateUnit(name, execStart, workDir, user string, env map[string]string) string" description: "Genera el texto de un archivo .service de systemd para una app. Incluye restart automático y env vars en orden determinista." tags: [systemd, unit, service, generate, deploy] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "" imports: [fmt, sort, strings] params: - name: name desc: "nombre del servicio (aparece en Description)" - name: execStart desc: "comando completo para arrancar la app (ruta absoluta al binario + args)" - name: workDir desc: "directorio de trabajo del servicio (vacío para omitir)" - name: user desc: "usuario del sistema bajo el que corre el servicio (vacío para omitir)" - name: env desc: "variables de entorno key=value para el servicio" output: "texto completo del archivo .service listo para escribir a /etc/systemd/system/" tested: false tests: [] test_file_path: "" file_path: "functions/infra/systemd_generate_unit.go" --- ## Ejemplo ```go unit := SystemdGenerateUnit( "dag_engine", "/opt/apps/dag_engine/dag_engine", "/opt/apps/dag_engine", "deploy", map[string]string{"PORT": "8080", "DB_PATH": "/opt/apps/dag_engine/data/ops.db"}, ) fmt.Println(unit) ``` ## Notas Función pura sin I/O. Las env vars se ordenan alfabéticamente para output determinista. Genera un unit con Restart=on-failure y RestartSec=5.