繰り返し実行を避けるためのシェルスクリプト

参照:
繰り返し実行メソッドを回避するためのシェルスクリプト
https://m.jb51.net/article/60285.htm
シェル特殊変数:シェル$ 0、$#、$ *、$ @、$?、$$、およびコマンドラインパラメーター
https ://www.cnblogs.com/davygeek/p/5670212.html
Linuxシェル文字列操作(長さ、検索、置換)詳細な説明
https://www.cnblogs.com/chengmo/archive/2010/10/02/1841355 .html
シェルスクリプトの論理的な判断と文字列の比較
https://www.cnblogs.com/-beyond/p/8262265.html


シングルトンモードスクリプトの先頭に次のコードを追加するだけで、繰り返し実行されないようにできます

#プロセスのフルネームをフルパスで取得
basePath = $(cd `dirname $
0` ; pwd)fullPathProc = $ basePath / $ {0 ## * /}

#プロセスをフルネームで実行します
if [$ fullPathProc!= $ 0]; 次に、
  / bin / bash $ fullPathProc
  exit 1
fi

#プロセスが実行されているかどうかを確認します
pCount = $(ps -ef | grep $ fullPathProc | grep -v 'grep' | grep -v '-c sh' | grep -v $$ | grep -c 'sh')
if [ $ pCount -gt 0]; その後、
  「$ fullPathProcが実行されている...」エコー 
  の出口0
Fiの

エコー "$ fullPathProcが今始まります..."
スリープ1800


たとえば、t.shとして保存し、2つのターミナルでsh t.shを実行して、効果を確認します。

説明:
$ 0:現在のスクリプトの名前、必ずしもフルパスを含まない
$$:現在のスクリプトのプロセスIDはPIDであり、サブシェルのPPIDでもあります。フィルターで除外すると、このプロセスとサブプロセスを除外できます
grep -v '-c sh': crontabによって実行されるスクリプトには、もう1つのプロセスがあります-c sh
grep -c 'sh':countキーワードの数sh、つまりcount
 

 

元の記事27件を公開 賞賛された4件 訪問9695件

おすすめ

転載: blog.csdn.net/yoshubom/article/details/88544909