{"record":{"id":"d5bfe32e5306cb84","repo":"zeroclaw-labs/zeroclaw","slug":"no-log-files-found-at-is-the-service-installed","errorCode":null,"errorMessage":"No log files found at {}. Is the service installed?","messagePattern":"No log files found at (.+?)\\. Is the service installed\\?","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"warning","filePath":"crates/zeroclaw-runtime/src/service/mod.rs","lineNumber":1023,"sourceCode":"        InitSystem::Systemd => {\n            let args = linux_journalctl_args(config, lines, follow);\n            let status = Command::new(\"journalctl\")\n                .args(&args)\n                .status()\n                .context(\"Failed to run journalctl\")?;\n            if !status.success() {\n                bail!(\"journalctl exited with non-zero status\");\n            }\n        }\n        InitSystem::Openrc => {\n            // OpenRC logs go to /var/log/<service>/error.log (as configured in the init script).\n            let log_dir = linux_openrc_log_dir(config);\n            let log_file = log_dir.join(\"error.log\");\n            if !log_file.exists() {\n                // Fall back to access log\n                let access_log = log_dir.join(\"access.log\");\n                if !access_log.exists() {\n                    bail!(\n                        \"No log files found at {}. Is the service installed?\",\n                        log_dir.display()\n                    );\n                }\n                return tail_file(&access_log, lines, follow);\n            }\n            tail_file(&log_file, lines, follow)?;\n        }\n        InitSystem::Auto => unreachable!(\"Auto should be resolved before this point\"),\n    }\n    Ok(())\n}\n\nfn logs_windows(config: &Config, lines: usize, follow: bool) -> Result<()> {\n    let logs_dir = config\n        .config_path\n        .parent()\n        .map_or_else(|| PathBuf::from(\".\"), PathBuf::from)","sourceCodeStart":1005,"sourceCodeEnd":1041,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/service/mod.rs#L1005-L1041","documentation":"For OpenRC installs, logs_linux expects logs under the OpenRC log dir (defaulting to /var/log/<service>/) with error.log preferred and access.log as fallback. If neither file exists it bails, assuming the OpenRC service was never installed or has not run yet.","triggerScenarios":"'zeroclaw service logs --service-init openrc' before the daemon wrote any logs: service not installed, installed but not started, or the init script writing to a different log dir.","commonSituations":"Gentu/Alpine-style hosts where logs runs before the first start; custom init script with a relocated log dir; permissions preventing log creation under /var/log.","solutions":["Install and start the service: zeroclaw service install --service-init openrc && zeroclaw service start","Verify state with rc-service <name> status and check the log dir directly","Confirm the init script's daemon logging paths match linux_openrc_log_dir's derivation"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let log_dir = openrc_log_dir(); // /var/log/<service> per the init script\nif !log_dir.join(\"error.log\").exists() && !log_dir.join(\"access.log\").exists() {\n    // service never ran: start it before requesting logs\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Start the OpenRC service and confirm rc-service status before reading logs","Ensure /var/log/<service> is writable by the daemon user","Keep the init script's log paths aligned with the runtime's derivation"],"tags":["linux","openrc","logs","service","file-not-found"],"backgroundTag":"log-file-not-found","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}