参照:
繰り返し実行メソッドを回避するためのシェルスクリプト
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