我正在使用sun Solaris 10
哪个遗留系统,我制作了一个处理特定生产者的脚本,它由bash/perl/posix/sqlplus/awk
大约 1k 行组成,在独立模式下工作正常,它会按预期工作,但存在一个问题,该脚本在 crontab 中不起作用通过 StackOverflow/stackunixexchange 遵循了很多建议,例如:
- 从舍邦开始
#!/bin/bash
- 具有完全权限的脚本 777
- 正确的 crontab 时间语法
- 服务已重新启动
- 在 shell 顶部加载所有环境变量
- 在 crontab bash 中的脚本开头设置 bash
我的问题仅在该脚本上,其余脚本工作正常,可能是因为脚本必须在 bash 中,并且 crontab 默认使用 sh 或 crontab 加载最小环境变量运行
最后,我通过将所需的 shell 插入另一个 shell 并通过在 crontab 中设置新 shell 来通过新 shell 运行它来解决问题,在此步骤之后,我可以看到 crontab 工作正常,它可以运行脚本,但问题是脚本没有完成预期的工作,它会跳过bash statements
像生产者if statements
这样的其他工作sqlplus
/Perl statements
您能告诉我如何解决这个问题吗?这个问题仅在将脚本安排到 crontab 时发生
crontab 中的 shell 看起来像:
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
您无法在子 shell 中更改环境:当子 shell 结束时,更改将丢失。子 shell 无法更改父 shell 的环境。您必须更改当前 shell 中的环境。对您的脚本进行以下更改:
/rate/environment.sh >/dev/null
应该
. /rate/environment.sh >/dev/null