Сценарий работает при выполнении от терминала, но, он дает" (КРОН) информацию (Никакой 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
Спасибо всем за поддержку.
logs/testpad1.log
будет вести себя по-другому в зависимости от Вашего текущего каталога. Это может также вести себя по-другому зависящий, если cron
работает как корень, или Вы называете сценарий от своего терминала.
сейф (и обычно коррекция ошибок) вещью сделать является твердый код полный путь в имя файла:
/home/me/scripts/logs/testpad1.log
/var/log/testpad1.log