# Systemd - List status of services ```bash # list status of all services systemctl status # list status specific service systemctl status yourservice ``` - List all systemd timers: ```bash systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Wed 2018-06-27 16:45:01 CEST 2h 16min left Tue 2018-06-26 16:45:01 CEST 21h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Thu 2018-06-28 07:31:00 CEST 17h left Wed 2018-06-27 07:31:25 CEST 6h ago pli-puppet-run.timer pli-puppet-run.service 2 timers listed. Pass --all to see loaded but inactive timers, too. ``` ## Logs All systemd logs end up in journald. One important exception is __sssd__ which provides authentication against Active Directory. Its logs can be found in `/var/log/sssd`. ## Debug Service Start Failure ### Wrapper to Catch Output To catch all the output in a file write a small wrapper: ``` #!/usr/bin/bash LOGFILE=/tmp/test.log echo "$(date): " "$@" >> $LOGFILE exec "$@" &>> $LOGFILE ``` and store it e.g. as `/root/systemd_debug_starter.sh`. Then inject it into the daemon startup in the unit file with ``` ExecStart=/root/systemd_debug_starter.sh $ORIGINAL_EXECUTABLE ``` then you need to run ``` systemctl daemon-reload systemctl start $SERVICE ``` and check out the log file. ### Strace If the error is more subtle, like problems with `SIGPIPE`, `strace` can be useful to unveil the problem. You may inject strace into the daemon startup in the unit file with ``` ExecStart=strace -D -f -o /tmp/strace.txt $ORIGINAL_EXECUTABLE ``` then you need to run ``` systemctl daemon-reload systemctl start $SERVICE ``` and check out the log file.