Команда gzip не работает в сценарии оболочки

384
damodar

Если я запускаю свой скрипт через crontab, gzip не работает нормально. Если я запускаю тот же скрипт вручную, gzip работает.

Команда, которую мы имеем в нашем скрипте:

gzip -vf $path/file.eee 

В моем сценарии я создаю один файл журнала в .expформате, а затем я пытаюсь сжать его с помощью команды gzip

gzip -vf $PATH/file.exp 

После этого ожидания, file.exp.gzно gzip не работает, я увидел состояние gzip, которое он возвращает 141. Помимо gzip этот скрипт работает нормально, другие команды работают нормально.

$PATHэто путь к file.exp. Я скопировал file.expв /rootпапку. В корневую папку я поместил один тестовый скрипт, имеющий gzip -vf /root/file.expкоманду. Этот тестовый скрипт я добавил в crontab, который работает нормально. После завершения crontab я увидел вывод в корневой папке их я мог видеть file.exp.gzфайл. В crontab я дал правильного пользователя и команду.

-2
Что значит "не работает нормально"? Tomasz Jakub Rup 5 лет назад 3
Ваш вопрос очень низкого качества. Я предполагаю, что crontab работает в другой папке, чем если вы запустите его вручную. davidbaumann 5 лет назад 0
Привет, добро пожаловать в SuperUser. Пожалуйста, прочитайте [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask): «Кроме того, поделитесь с нами вашими выводами. Обмен вашими исследованиями помогает всем. Расскажите, что вы нашли и почему это не отвечало вашим потребностям. Это показывает, что вы потратили время, чтобы попытаться помочь себе, избавляет нас от повторения очевидных ответов и, прежде всего, помогает получить более конкретный и актуальный ответ! " C0deDaedalus 5 лет назад 2
попробуйте `gzip -vf $ path / file.eee 1> ~ / testmsg.txt 2> ~ / testerr.txt` и прочитайте сообщения об ошибках из этих файлов в домашнем каталоге пользователя. Проверьте, работает ли какая-либо другая команда "в crontab", например, при создании каталога. Убедитесь, что пользователь crontab подражает, имеет необходимые права доступа. Jack White 5 лет назад 0
Привет, в моем сценарии я создаю один файл журнала в формате .exp, затем я пытаюсь сжать его с помощью команды gzip (gzip -vf $ PATH / file.exp) после этого ожидаемого file.exp.gz, но gzip сбой, я видел состояние gzip, которое он возвращает 141. кроме gzip этот скрипт работает нормально, другие команды работают нормально damodar 5 лет назад 0
Вы действительно используете `$ PATH` /` $ path`? Это системная переменная Tomasz Jakub Rup 5 лет назад 1

1 ответ на вопрос

1
Tomasz Jakub Rup

Код выхода:

В выходных значениях значение выше 128 указывает завершение из-за сигнала, а значение выше 128 указывает, какой сигнал вызвал завершение. Итак, если мы вычтем 128 из кода выхода OP 141, мы получим 13, что соответствует SIGPIPE ( man 7 signalдля списка стандартных сигналов и их соответствующих целочисленных значений).

Страница man содержит комментарий SIGPIPE как "Сломанная труба: пишите в трубу без читателей".

Переменная:

Вы действительно используете $PATH/ $path?

echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin echo $path /usr/local/sbin /usr/local/bin /usr/bin 

О работе cron:

Задания Cron работают в минимальной среде. $PATHотличается в сеансах cron и shell.

Частичный ответ на основании Ваших данных:

Я полагаю, что последняя запись $PATHв сеансе вашей оболочки содержит путь к вашему сценарию. file.expсоздан на этом пути.

Да, $ PATH - это путь к файлу .exp. Я скопировал файл .exp в / корневую папку. В корневую папку я поместил один тестовый скрипт с командой gzip -vf /root/file.exp. этот тестовый скрипт я добавил в crontab, который работает нормально. после завершения crontab я увидел вывод в корневой папке, и я смог увидеть файл file.exp.gz. В crontab я дал правильного пользователя и команду damodar 5 лет назад 0
@damodar Попробуйте использовать полный путь к `file.exp` вместо` $ path / file.exp` Tomasz Jakub Rup 5 лет назад 0