我正在使用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 中的 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