私が働く会社は、ユーザの介入なしに特定の複雑な操作を実行するために数分ごとにシェルスクリプトを実行するcrontabを設定しています。顧客があるので、彼らは何度でも次の構造を使用して、すでに実行されていない場合は、このスクリプトは、基本的には、第1チェック、シーケンス内の複数のPerlスクリプトを実行:事実を除いて、作品の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など)が1つしかないかどうかを判断しようとしていますが、そう。何か案は? (使用している)