在Linux伺服器上部署的腳本程式,有些需要做到防止多重新開機動(prevent multi-processing)。主要見于:
- 串行batch
- 頻繁的crontab定時任務
- 單程序設計的程式
遇到這種需要防止多重新開機動的情況時,可以簡單地修改一下腳本的調用執行方式。比如有一個“ 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
簡單說明一下:
- 擷取伺服器上的目前程序清單
- 查詢程序清單裡面是否包含目标腳本檔案
- 過濾grep指令噪聲輸出(預設的--color=auto輸出)
- 屏蔽grep指令比對結果輸出(> /dev/null)
- 如果程序清單裡面包含目标腳本檔案 → 程式退出
- 如果程序清單裡面不包含目标腳本檔案 → 執行腳本程式