Bash
bash 腳本無法通過 crontab 按預期工作
我正在使用
sun Solaris 10
哪個遺留系統,我製作了一個處理特定生產者的腳本,它由bash/perl/posix/sqlplus/awk
大約 1k 行組成,它在獨立模式下工作正常,它可以按預期工作,但是有一個問題是腳本在 crontab 中不起作用我通過 StackOverflow/stackunixexchange 遵循了很多建議,例如:
- 從shebang開始
#!/bin/bash
- 具有完全權限的腳本 777
- 正確的 crontab 時間語法
- 服務重新啟動
- 在shell頂部載入所有環境變數
- 在 crontab bash 中的腳本開頭設置 bash
我的問題僅在該腳本上執行,其餘腳本工作正常,可能是因為腳本必須在 bash 中,並且 crontab 預設執行時使用 sh 或 crontab 載入最小的環境變數
最後,我通過將所需的 shell 插入另一個 shell 並通過在 crontab 中設置新 shell 來通過新 shell 執行它解決了這個問題,在這一步之後我可以看到 crontab 工作正常,它可以執行腳本,但問題是腳本沒有完成預期的工作,它像生產者一樣跳過其他工作/
bash statements
你if statements
能告訴如何解決這個問題,這個問題只有在將腳本調度到 crontab 時才會發生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 . . .
您不能在子shell 中更改環境:當子shell 結束時,更改將失去。子shell 不能改變父級的環境。您必須更改目前 shell 中的環境。對您的腳本進行此更改:
/rate/environment.sh >/dev/null
應該
. /rate/environment.sh >/dev/null