天天看點

Shell防止執行程式被多重新開機動

在Linux伺服器上部署的腳本程式,有些需要做到防止多重新開機動(prevent multi-processing)。主要見于:

  1. 串行batch
  2. 頻繁的crontab定時任務
  3. 單程序設計的程式

遇到這種需要防止多重新開機動的情況時,可以簡單地修改一下腳本的調用執行方式。比如有一個“ batch.py ”Python腳本,正常執行方式如下:

/usr/bin/env python batch.py
           

為了防止多重新開機動,可以修改為以下方式啟動:

ps aux | grep batch.py | grep -v grep > /dev/null || /usr/bin/env python batch.py
           

簡單說明一下:

  1. 擷取伺服器上的目前程序清單
  2. 查詢程序清單裡面是否包含目标腳本檔案
  3. 過濾grep指令噪聲輸出(預設的--color=auto輸出)
  4. 屏蔽grep指令比對結果輸出(> /dev/null)
  5. 如果程序清單裡面包含目标腳本檔案 → 程式退出
  6. 如果程序清單裡面不包含目标腳本檔案 → 執行腳本程式

繼續閱讀