Невозможно использовать Gradle с Cron Ubuntu

Я использую для этого unar; по умолчанию, если архив содержит более одного файла или каталога верхнего -уровня, он создает каталог для хранения извлеченного содержимого, названный в честь архива так, как вы описываете:

unar foo.zip

Вы можете принудительно создать каталог во всех случаях с опцией -d:

unar -d foo.zip

Кроме того, функция может сделать это с помощьюunzip:

unzd() {
    if [[ $# != 1 ]]; then echo I need a single argument, the name of the archive to extract; return 1; fi
    target="${1%.zip}"
    unzip "$1" -d "${target##*/}"
}

target=${1%.zip}

Строка

удаляет расширение .zip, не принимая во внимание ничего другого (, поэтому foo.zipстановится foo, а ~/foo.zipстановится~/foo).

${target##*/}

расширение параметра удаляет все до последнего /, поэтому ~/fooстановится foo. Это означает, что функция извлекает любой файл .zipв каталог с его именем в текущем каталоге. Используйте unzip $1 -d "${target}", если вы хотите вместо этого распаковать архив в каталог рядом с ним.

0
13.12.2020, 06:06
1 ответ

cronдовольно прост в использовании, но у него есть некоторые особенности, о которых вам следует знать. Вот краткий обзор:

1. cronзадания имеют другую СРЕДУ

cronзадания выполняются в среде, отличной от вашей интерактивной оболочки . ПУТЬ является частью ОКРУЖАЮЩЕЙ СРЕДЫ. Это может быть причиной вашей проблемы :ПУТЬ к gradleне может быть в ПУТИ, используемой cron. Это может вызвать проблемы для любого задания cron.

Решение :Как правило, это можно решить, указав полный путь для всех команд.
Вместо этого:

0 2 * * * gradle 

Используйте это:

0 2 * * * /full/path/to/gradle

2. cronне знает о доступности ресурсов

cronне проверяет наличие ресурсов, необходимых для запуска задания, перед попыткой запуска задания. Обычно это происходит при запуске задания cronво время загрузки (, т. е. с использованием средства @reboot). Примером такой ситуации является задание, которое запускается во время загрузки и требует доступа к сетевым ресурсам.

Решение :Обычно это решается путем добавления команды sleep Xперед заданием:

@reboot ( /bin/sleep 30; /home/myhome/myprog.sh )

3. Об ошибках выполнения в задании cronне сообщается

cronне имеет доступа к вашему терминалу, поэтому stderrпереходит к /dev/null. Если вы хотите видеть ошибки (и вы всегда это делаете! ),вам нужно только перенаправить stderrв файл -это один из способов сделать это:

0 2 * * * /home/myhome/dosomething.sh > /home/myhome/cronjoblog 2>&1

Это перенаправляет всеstdout(1 )на /home/myhome/cronjoblogи перенаправляетstderr(2 )наstdout(2>&1 ). Весь вывод идет в ваш файл cronjoblog.

Дополнительная литература поcron

1
18.03.2021, 22:43

Теги

Похожие вопросы