Перенаправление вывода в файл, используемый в сценарии, не работает при выполнении от crontab

Сценарий работает при выполнении от терминала, но, он дает" (КРОН) информацию (Никакой MTA установленный, отбрасывающий вывод)" информация при выполнении от crontab.

Ниже мое содержание сценария. У меня есть 2 сценария, и основные сценарии, который выполняет эти два сценария последовательно. Можно создать их, как это находится в системе также для тестирования. Я не записал ничего сложного здесь.

testpad1.sh. Сценарий записан с ошибкой намеренно.

#!/bin/bash
echo "This is script one.
sleep 3

testpad2.sh

#!/bin/bash
echo "This is script two"
sleep 3

masterpad.sh

#!/bin/bash
mkdir -p logs
./testpad1.sh &> logs/testpad1.log
echo `date`
./testpad2.sh &> logs/testpad2.log
echo `date`

Как Вы видите, сценарий masterpad.sh перенаправляет вывод других двух сценариев к их соответствующим файлам журнала.

Вот cronjob.

* * * * * /opt/scripts/masterpad.sh

Это работает без проблем при выполнении от терминала, путем создания testpad1.log и testpad2.log наряду с ожидаемым выводом.

Но если я планирую то же в crontab, оно дает" (КРОН) информацию (Никакой MTA установленный, отбрасывающий вывод)" ошибка. Эта ошибка была проверена путем выполнения, "grep CRON /var/log/syslog".

Спасибо.

Обновление

Так как пользователь в разделе комментария сомневался, что это сообщение с другим сообщением, Ниже является выводом, чтобы показать, что, ошибка не была там ранее, но произошла только после того, как я добавил cronjob. Это - предыдущий вывод "grep КРОН/var/log/syslog" команда.

CMD (/opt/scripts/masterpad.sh &> /opt/scripts/logs/masterpad.log)
CMD (/opt/scripts/masterpad.sh)
CRON[6656]: (CRON) info (No MTA installed, discarding output)
CRON[6733]: (padmahasa) CMD (/opt/scripts/masterpad.sh)
CRON[6732]: (CRON) info (No MTA installed, discarding output)

Обновление 2: Итоговый ответ из комментариев и принятый ответ.

Получить и STDOUT и STDERR из других сценариев, которые вызываются из основного сценария или команды (какой crontab выполняется), может использовать обоих "и>" или все еще более оптимальный вариант "| и класть для первого удара" перенаправление, или можно использовать любую другую подходящую опцию в качестве в этой таблице, но, для получения STDOUT и STDERR основного сценария или команды "/absolute/path/to/script> абсолютный/путь/к/файл журнала 2> &1" является единственным форматом, который работает. Следовательно модификации к

1. masterpad.sh

#!/bin/bash
mkdir -p logs
./testpad1.sh |& tee logs/testpad1.log
echo `date`
./testpad2.sh |& tee logs/testpad2.log
echo `date`

2. задание crontab

* * * * * /opt/scripts/masterpad.sh > /opt/scripts/logs/masterpad.log 2>&1

Спасибо всем за поддержку.

1
задан 13 November 2019 в 07:51

1 ответ

logs/testpad1.log будет вести себя по-другому в зависимости от Вашего текущего каталога. Это может также вести себя по-другому зависящий, если cron работает как корень, или Вы называете сценарий от своего терминала.

сейф (и обычно коррекция ошибок) вещью сделать является твердый код полный путь в имя файла:

/home/me/scripts/logs/testpad1.log
/var/log/testpad1.log
1
ответ дан 7 December 2019 в 14:56

Другие вопросы по тегам:

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