Служба запускает скрипт в другом окружении, чем твой терминал, — и тот же путь в ней ведёт в другое место.
Путь archive/partial.tar.gz без / в начале — относительный: он считается от текущего каталога. В терминале это каталог, куда ты перешёл через cd. Службу systemd запускает без входа в систему: ей не достаются ни текущий каталог терминала, ни то, что настраивают ~/.profile и ~/.bashrc, — алиасы и добавки в PATH. Окружение службе даёт сам systemd.
Посмотреть на него можно, не трогая lab-backup: systemd-run запускает команду временной службой, --wait --pipe дожидается её конца и выводит её строки в терминал, -p User=student запускает её от тебя.
Сравни терминал и службу
В ~/sched-lab напечатай текущий каталог и PATH сначала в терминале, а потом во временной службе от student.
Сначала предположи
Какой каталог напечатает pwd во временной службе?
Теперь начни упражнение, выполни команду и сверь прогноз с выводом.
Служба начинает работу в корне, и data для неё — это /data. PATH у неё короткий, четыре каталога: программа из ~/bin или ~/.local/bin, которую ты запускаешь по имени в терминале, в службе не найдётся.
Чинят это с одной из двух сторон. В юните: строка WorkingDirectory=/home/student/sched-lab в разделе [Service] задаёт текущий каталог, Environment=PATH=… — PATH; после правки файла — sudo systemctl daemon-reload. В скрипте: абсолютные пути или cd в нужный каталог до первой команды, которой он нужен.