Shell-Script
Cronjob 覆蓋腳本輸出重定向
我在執行我的腳本的 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 行中設置
-i
and--login
選項(以載入 、 或 中的第一個)~/.bash_profile
,或~/.bash_login``~/.profile
- 設置這些變數或執行這些活動
/some/command.sh
參考:
腳註:
- 除非你已經設置了 BASH_ENV