daemonInstall writes a systemd / launchd unit template. Best-effort scaffold — operator adjusts as needed.
(args []string, logger *zap.Logger)
| 220 | // daemonInstall writes a systemd / launchd unit template. Best-effort |
| 221 | // scaffold — operator adjusts as needed. |
| 222 | func daemonInstall(args []string, logger *zap.Logger) error { |
| 223 | exe, err := os.Executable() |
| 224 | if err != nil { |
| 225 | return err |
| 226 | } |
| 227 | cfg := scheduler.LoadConfigFromEnv() |
| 228 | sock := scheduler.DefaultSocketPath(cfg) |
| 229 | template := fmt.Sprintf(`# chatcli scheduler daemon unit |
| 230 | # Adapt as needed for your init system. |
| 231 | |
| 232 | # systemd: drop at /etc/systemd/system/chatcli-scheduler.service |
| 233 | [Unit] |
| 234 | Description=chatcli scheduler daemon |
| 235 | After=network.target |
| 236 | |
| 237 | [Service] |
| 238 | Type=simple |
| 239 | ExecStart=%s daemon start --socket %s |
| 240 | Restart=on-failure |
| 241 | User=%s |
| 242 | |
| 243 | [Install] |
| 244 | WantedBy=default.target |
| 245 | `, exe, sock, os.Getenv("USER")) |
| 246 | fmt.Println(template) |
| 247 | logger.Info("daemon install: template printed", zap.String("socket", sock)) |
| 248 | _ = args |
| 249 | return nil |
| 250 | } |
| 251 | |
| 252 | // ─── helpers ────────────────────────────────────────────────── |
| 253 |
no test coverage detected