Всё, что скрипт печатает в службе, попадает в журнал, — по нему видно, что случилось ночью.
Строки, которые скрипт пишет в поток вывода и в поток ошибок, systemd кладёт в журнал службы с пометкой backup.sh[номер процесса] — их показал sudo journalctl -u lab-backup. Поэтому скрипту для таймера свой файл журнала не нужен: достаточно печатать, что он сделал, — saved archive/…, — а об ошибках сообщать в поток 2.
После строк скрипта systemd пишет итог: Main process exited, code=exited, status=2/INVALIDARGUMENT и Failed with result 'exit-code'. Это код завершения скрипта: на tar его остановил set -e, код tar стал кодом скрипта, а служба получила состояние failed. Сбой увидят systemctl status и мониторинг.
При ручном запуске скрипт пишет в терминал. Чтобы строка попала в журнал и тогда, есть logger -t backup "текст": запись с меткой backup, найти её — journalctl -t backup.
Из backup.sh убрали строку set -euo pipefail, а службу запустили из /, как в начале урока. Что покажет systemctl status lab-backup после запуска?
-
Без
set -eскрипт пошёл дальше: mv тоже упал, а последней выполниласьecho "saved …"с кодом 0. Его systemd и записал. -
Скрипт ничего не ждёт: tar и mv сразу сообщили об ошибке, и через три секунды
sleepскрипт завершился.
Код скрипта дала последняя команда, echo, — ноль, и systemd записал успешный запуск. В журнале при этом есть и ошибки tar и mv, и строка saved … об архиве, которого нет.
Главное в шаге
-
Вывод и ошибки скрипта в службе попадают в журнал:
sudo journalctl -u <служба>. -
Код завершения скрипта решает, успешен запуск службы или
failed. -
logger -t метка "текст"пишет в журнал при любом запуске,journalctl -t метканаходит запись.