systemd service fails after pacman upgrade but journalctl shows no error output
0 reputation · 28 Jan 2020, 12:34 UTC
0 reputation · 28 Jan 2020, 12:34 UTC
Determine why a systemd-managed deployment service fails to start after a routine pacman system upgrade, yet journalctl -u returns no visible error messages for the unit.
The service unit is enabled and was running before the upgrade. Pacman's transaction log confirms the relevant packages were updated. Journal persistence is configured with Storage=persistent in journald.conf, and the journalctl --vacuum-time retention window should cover the failure period. Non-root access to the journal is granted via the systemd-journal group.
It is unclear whether the failure originates from a missing dependency pulled by the upgrade, a configuration file conflict that systemd does not surface, or a silent exec failure that bypasses standard logging. The absence of journal entries despite persistent storage raises questions about the logging pipeline for this specific unit.
Storage=persistent is set?ExecStartPre phase before the main process spawns?The service is in a failed state but journalctl -u shows no visible messages because the failure occurs before the unit’s stdout/stderr is attached to the journal, or the log is being filtered by boot scope and user access. With Storage=persistent set, the journal can still be empty for this unit if the failure is an early exec failure, ExecStartPre exit, or a missing binary/library that prevents the process from spawning.
Confirmed: Unit was enabled and running pre-upgrade. Pacman transaction log confirms updates. Journal persistence is configured and retention covers the failure window. Non-root journal access is granted via systemd-journal group.
Likely explanation, not confirmed: ExecStartPre failure, binary incompatibility from a library update, or a missing dependency causing immediate exec failure. These conditions can leave systemd in failed state with no journal entries for the unit’s main process.
systemctl status <unit-name>.service --no-pager journalctl -b -u <unit-name>.service --no-pager
Use -b to include boot-time logs. -u alone can miss messages from early transitions.
systemctl show -p ActiveEnterTimestamp --value <unit-name>.service journalctl --since "5 minutes ago" --until "now" -u <unit-name>.service grep -i "upgraded\|installed" /var/log/pacman.log | tail -n 200
Match the failure timestamp from systemctl status with the last pacman transaction entries.
systemctl cat <unit-name>.service
Note the ExecStartPre and ExecStart commands and the User= setting.
which <binary-from-ExecStart> ldd $(which <binary>)
Look for missing or incompatible shared libraries after the upgrade.
sudo -u <service-user> <full-path-to-binary> --help
Run the binary as the service user to see direct error output that systemd may not capture.
One missing diagnostic detail that changes the recommendation: the exact unit name and the ExecStart/ExecStartPre lines from systemctl cat. Without them the ldd and manual exec checks cannot be scoped safely.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.