У меня есть скрипт Kshell, который выполняет программу Java.

/path/to/java -jar jarfile.jar some parameters > log
Same line 5 times with different parameters appending output to log file.
cat log | mail -s email@email.com

Проблема, которую я продолжаю иметь, заключается в том, что когда я помещаю этот скрипт в cron, выполняется только последняя строка, которая принимает файлы журнала и отправляет электронную почту. Все вышеперечисленные фактические функционально необходимые строки игнорируются. Я получаю пустое письмо по расписанию cron, но сценарий должен занять около 1 часа.

Но когда я запускаю скрипт вручную, он работает нормально.

2 ответа2

1

Я проверил почту cron на проблему. Для «невозможно получить доступ к jarfile.jar» я добавил полный путь в сценарий, а для «cat: 0652-050 Cannot open /path /to /log» я создал файл журнала перед использованием команды touch. Теперь мой сценарий выглядит следующим образом.

touch /path/to/log
/path/to/java -jar /path/to/jarfile.jar some parameters > /path/to/log
Same line 5 times with different parameters appending output to log file.
cat /path/to/log | mail -s email@email.com

Я узнал, что абсолютный путь - это ключ, чтобы избежать подобных проблем.

0

Это старая проблема "cron с очень простой средой". Когда вы запускаете скрипт в своей собственной оболочке, процессы, которые вы запускаете, находятся в среде, заданной вашими профилями. Тем не менее, ваши задания cron начинаются в очень простой среде, в которой отсутствуют куча переменных и информация о пути. На самом деле об этом можно догадаться, посмотрев в сообщениях cron о своих запусках или глобальный журнал демона cron.

Поскольку вы используете ksh, я предлагаю поискать .kshrc или .profile в начале скрипта:

. /home/yourid/.kshrc
. /home/yourid/.profile

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .