bash-скрипт не работает как ожидалось через crontab

bash-скрипт не работает как ожидалось через crontab

Я работаю с sun Solaris 10устаревшей системой. Я создал скрипт, который обрабатывает определенного производителя. Он состоит bash/perl/posix/sqlplus/awkпримерно из 1 тыс. строк и отлично работает в автономном режиме. Он работал бы так, как и ожидалось, но возникла проблема, из-за которой скрипт не работал в crontab. Я последовал множеству предложений на StackOverflow/stackunixexchange, например:

  1. начать с шебанга#!/bin/bash
  2. скрипт с полным разрешением 777
  3. правильный синтаксис времени crontab
  4. служба перезапущена
  5. загрузил все переменные окружения в верхней части оболочки
  6. установить bash в начале скрипта в crontab bash

моя проблема только с этим скриптом, а остальные скрипты работают нормально, возможно, потому, что скрипт должен быть в bash, а crontab по умолчанию запускается с sh или crontab load минимальной переменной окружения

Наконец, я решил проблему, вставив нужную оболочку в другую оболочку и запустив ее через новую оболочку, установив новую оболочку в crontab. После этого шага я вижу, что crontab работает нормально и может запустить скрипт, но проблема в том, что скрипт не выполняет ожидаемую работу, он пропускает, bash statementsнапример, if statements и другие задания, такие как sqlplusmanufacturers. Perl statementsМожете ли вы подсказать, как решить эту проблему? Эта проблема возникла только при планировании скрипта в crontab?

оболочка в crontab выглядит так:

10 10,16 * * 1,4 bash /rate/u01/WORK/MP/ERROR/USAGE_REJECTIONS/HolderUsageShell.sh

Скрипт начинается следующим образом:

#!/bin/bash 
#environment shell contains all environment variables, I have tried to run it with/without and I got the same thing
/rate/environment.sh >/dev/null

cd /rate/path/
CurrentHour=$(date +%I)
DAY_In_Word=$(date +%A)

if [[ "$DAY_In_Word" == "Monday" || "$DAY_In_Word" == "Thursday" ]] && [[ "$CurrentHour" == "10" ]]; then
.
.
.

решение1

Вы не можете изменить свое окружение в подоболочке: когда подоболочка завершается, изменения теряются. Подоболочка не может изменить окружение родителя. Вы должны изменить окружение в текущей оболочке. Внесите следующие изменения в свой скрипт:

/rate/environment.sh >/dev/null

должно быть

. /rate/environment.sh >/dev/null

Связанный контент