我工作的公司有一個crontab設置爲每隔幾分鐘運行一個給定的Shell腳本以執行某些複雜操作,而無需用戶干預。該腳本序列中的主要執行多個Perl腳本,首先檢查是否有客戶,他們尚未運行,採用以下結構多次:通過Shell腳本確定Linux進程是否在給定參數下運行
for i in `seq 1 20`;
do
ps ax | grep ourFile10000008.p | grep pl 2>> /dev/null >> $LOG
if [ $? -eq 1 ] ; then
cd /path/to/the/script
perl ourFile10000008.pl 10000008 & 2>> $LOG
fi
ps ax | grep ourFile10000009.p | grep pl 2>> /dev/null >> $LOG
if [ $? -eq 1 ] ; then
cd /path/to/the/script
perl ourFile10000009.pl 10000009 & 2>> $LOG
fi
# (and so on, and so forth...)
done
這類作品,除了一個事實,即有現在我們的/path/to/the/script
文件夾中有數十個「ourFile」Perl腳本,它們是彼此的精確副本!每當新客戶上線時,我們都需要創建一個新副本,這使得維護這個結構非常困難。
我努力讓自己在一個單一的文件(這裏[theOneFile.pl]命名),這個結構來看這是這些腳本的另一個副本,但被稱爲一個新的論點每次。這工作,但現在我必須確保我只傳遞每個參數一次運行此文件。
經過一番研究,並感謝This answer,我成功地確定了運行[theOneFile.pl]到pgrep -af theOneFile.pl | tr '\000' ' '| awk '{print $4}' >> $LOG
後面的論點。但是,這給了我一個內容結果清單。爲了保持今天的邏輯不變,因爲有可能,我想只有以確定是否有與在給定的時間(例如theOneFile.pl 10000009)一個特定參數運行這些程序之一,但我不知道該怎麼辦所以。有任何想法嗎?