Linux Labs

Bash: обработка текста и скрипты / Ступень 8 из 9

Скрипт по расписанию: окружение, журнал, блокировка

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 6 · теория · 5 мин

Журнал скрипта

Всё, что скрипт печатает в службе, попадает в журнал, — по нему видно, что случилось ночью.

Строки, которые скрипт пишет в поток вывода и в поток ошибок, 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.

Проверь себя 1 вопрос

Из 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 метка находит запись.
Ubuntu 24.04
Загрузка…