Ваш сценарий предполагает, что он запускается из определенного каталога (обратите внимание, что почти каждый путь является относительным, а не абсолютным).cron
случайно запускает его из другого каталога.
Исправление
Если скрипт работает, когда вы запускаете его из каталога, в котором он находится, добавьте следующее в начало вашего скрипта:
mydir=$(dirname "$0") && cd "${mydir}" || exit 1
Объяснение
$0
- это (возможно, относительное) имя файла исполняемого скрипта оболочки.Для заданного имени файла команда dirname
возвращает каталог, содержащий имя файла.
Таким образом, эта строка изменяет каталоги на каталог, содержащий скрипт, или завершает работу с кодом ошибки, если произойдет сбой либо dirname
, либо cd
.