Скрипт KShell пропускает команды при планировании в cron

261
Weqaar Mohammed

У меня есть скрипт 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 часа.

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

0

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

1
Weqaar Mohammed

Я проверил почту 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
Gombai Sándor

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

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

. /home/yourid/.kshrc . /home/yourid/.profile 
Спасибо, я буду иметь это в виду, но я решил проблему, указав полный путь к файлу jar и журналу. Я нашел проблему, посмотрев на почту cron. Weqaar Mohammed 8 лет назад 0