bash 腳本無法透過 crontab 按預期工作

bash 腳本無法透過 crontab 按預期工作

我正在使用sun Solaris 10哪個遺留系統,我製作了一個處理特定生產者的腳本,它由bash/perl/posix/sqlplus/awk大約1k 行組成,在獨立模式下工作正常,它會按預期工作,但存在一個問題,該腳本在crontab 中不起作用透過 StackOverflow/stackunixexchange 遵循了很多建議,例如:

  1. 從舍邦開始#!/bin/bash
  2. 具有完全權限的腳本 777
  3. 正確的 crontab 時間語法
  4. 服務已重新啟動
  5. 在 shell 頂部載入所有環境變數
  6. 在 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

相關內容