Shell-Script

Cronjob 覆蓋腳本輸出重定向

  • March 29, 2017

我在執行我的腳本的 cronjob 時遇到了一個小問題。

該腳本看起來像這樣,它被命名為create_report.sh

#!/bin/bash
cd /work/directory
/some/command.sh > reports/report_$(date -d "1 day ago" +%Y%m%d).txt

這顯然有點簡化,但是在將輸出寫入某個文件後,該文件會附加到電子郵件並發送給我。

當我“手動”執行它時,它工作正常並且報告文件有內容。

然後我使用 crontab-generator.org 創建了一個 cronjob,它每天早上 7 點執行該腳本並將腳本的輸出靜音。

0 7 * * * /path/to/script/create_report.sh >/dev/null 2>&1

當 cronjob 執行腳本時,會創建報告文件並將其發送給我,但它們是空的。我自己可能想出解決這種行為的方法,但我沒想到會發生這種情況,有人可以向我解釋這是怎麼發生的,也許可以指出讓這種事情發生的正確方法嗎?

澄清一下:我create_report.sh對它創建的報告文件的輸出不感興趣。

提前致謝!

當 cron 執行您的 cron 作業時,它將(最終)執行 bash 來執行您的腳本,但該 bash 實例將是非互動式的,並且不是登錄 shell,因此它不會獲取您的任何配置文件。1如果您/some/command.sh依賴這些配置文件中的任何一個(設置變數或執行活動),那麼您需要:

  • 明確來源這些文件,或
  • 在執行腳本之前設置 BASH_ENV(到正確的文件),或者
  • 在 she-bang 行中設置-i選項(載入~/.bashrc),或
  • 在 she-bang 行中設置-iand--login選項(以載入 、 或 中的第一個)~/.bash_profile,或~/.bash_login``~/.profile
  • 設置這些變數或執行這些活動/some/command.sh

參考:

腳註:

  1. 除非你已經設置了 BASH_ENV

引用自:https://unix.stackexchange.com/questions/354498