linux鎖定腳本防止腳本重複運行

問題描述:設置在定時任務中的腳本一定要注意防止腳本重複執行,要不然會帶來一些想象不到的結果。

 

方式一:使用鎖定文件的方式來進行防止腳本重複運行,類似數據庫socket文件,但是這種情況有一種弊端就是,如果腳本因爲某些原因退出,但是lock文件沒有被清理掉,就會導致下一次的腳本運行失敗

# get script name
script_name=$(basename -- "$0")

# get script lock file
lock_file="/tmp/$script_name.lock"

# Check if script is run repeatedly
if [ -f $lock_file ]; then
  echo "`date '+%Y-%m-%d %H:%M:%S'` Another instance of $script_name is already running. Exiting." | tee -a $mylogfile
  exit 1
else 
  touch $lock_file
fi

# 程序執行體 # Delete scripts
lock file find $lock_file -delete 2>&1 | tee -a $mylogfile

 

方式二:使用過濾腳本進程個數的方式判斷腳本是否正在運行,這種方式要注意在腳本頭一定要加上#!/bin/bash,否則系統可能會識別成爲一個程序執行體,並不是一個腳本,導致過濾的時候有問題

#!/bin/bash
check_scripts() { #
get script name script_name=$(basename -- "$0") # get script counts running_scripts=$(pgrep -fc "$script_name") # check the number of scripts if (( running_scripts > 1 )); then echo "`date '+%Y-%m-%d %H:%M:%S'` Another instance of $script_name is already running. Exiting." exit 1 fi } # Check if script is run repeatedly check_scripts

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章