Я работаю с sun Solaris 10
устаревшей системой. Я создал скрипт, который обрабатывает определенного производителя. Он состоит bash/perl/posix/sqlplus/awk
примерно из 1 тыс. строк и отлично работает в автономном режиме. Он работал бы так, как и ожидалось, но возникла проблема, из-за которой скрипт не работал в crontab. Я последовал множеству предложений на StackOverflow/stackunixexchange, например:
- начать с шебанга
#!/bin/bash
- скрипт с полным разрешением 777
- правильный синтаксис времени crontab
- служба перезапущена
- загрузил все переменные окружения в верхней части оболочки
- установить bash в начале скрипта в crontab bash
моя проблема только с этим скриптом, а остальные скрипты работают нормально, возможно, потому, что скрипт должен быть в bash, а crontab по умолчанию запускается с sh или crontab load минимальной переменной окружения
Наконец, я решил проблему, вставив нужную оболочку в другую оболочку и запустив ее через новую оболочку, установив новую оболочку в crontab. После этого шага я вижу, что crontab работает нормально и может запустить скрипт, но проблема в том, что скрипт не выполняет ожидаемую работу, он пропускает, bash statements
например, if statements
и другие задания, такие как sqlplus
manufacturers. 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