如何在 bash 腳本中讀取服務狀態

如何在 bash 腳本中讀取服務狀態

我編寫了一個腳本來監控我的 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

相關內容