
我編寫了一個腳本來監控我的 VPS 上的特定服務。這項服務 (clamd.amavisd) 往往會意外地失效,當它失效時,我的電子郵件服務基本上就停止了。
我在腳本中使用以下指令:
STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)
問題是,當從終端運行時,腳本會收到該變數中的某些內容(我已將其回顯到文件中,以便我知道),但不幸的是,當在cron 作業中運行時,該變數為空。
很明顯我做錯了什麼。是否有一些我沒有考慮到的因素?
答案1
絕對,您運行的所有內容都cron
必須具有絕對路徑,因為cron
使用了環境變數的最小部分
STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)
您實際上可以在腳本中設定您需要的最重要的路徑
PATH=/bin:/usr/local/sbin
但如果有一天您不會發現預期的情況ls
實際上是惡意駭客的攻擊,那麼請始終使用絕對路徑
在腳本的開頭指定您願意使用類似的東西
CAT='/bin/cat'
LS='/bin/ls'
並將其用作
$LS -la /some/path
$CAT /etc/passwd