同じ変数を使用して共通添字に同時にアクセスできるスクリプトの数に制限はありますか?

同じ変数を使用して共通添字に同時にアクセスできるスクリプトの数に制限はありますか?

私はRaspberry Pi4(OSはUbuntu Server)でジョブ用の別々のログファイルを生成するために約10個のスクリプトを作成しました。このスクリプトは、crontab、sshを介して有効になっており、12個のRaspberry Pi MotionEyeセキュリティカメラに問い合わせ、生成されたログファイルと電子メールで実行する操作を報告します。これらのスクリプトは異なるクローン時間でアクティブになりますが、そのうちの3つは時間通りに実行され、2つは真夜中にのみ実行されますが、実行は時々重なります。現在のスクリプトはほぼ自立しています。私が望むのは、電子メール送信を実行するサブスクリプトを生成することです。したがって、変更があっても、すべての基本スクリプトでその操作に従う必要はありません。これをテストするために、各ログファイル(6、9、12、4、10、12、4行)に異なるテキスト行を書き込む7つのテストスクリプトファイルTestFileA - TestFileGを作成しました。

#!/bin/sh

export TLOG=/home/.myaccountname./TestDir/TestFileD.tmp
ALOG=/home/.myaccountname./TestDir/TestFileD.log
#####
echo "This TestFileD log contains 2 additional lines" >| $TLOG
echo "TestFileD, Line 1" >> $TLOG
echo "$(date "+%m-%d-%Y %T"): TestFileD Complete" >> $TLOG
cat $TLOG >> $ALOG
/home/.myaccountname./TestDir/SendLog.sh
echo "MailFile: "$MailFile >> $ALOG
rm $TLOG

その後、各スクリプトは同じ$ TLOG変数に別々の一時ログファイル名を割り当て、デフォルトで次のSendLogサブスクリプトを呼び出します。

#!/bin/sh

MailFile="$TLOG".txt
cat /home/.myaccountname./TestDir/_EmailHeader $TLOG >| $MailFile
cat $MailFile | /usr/sbin/ssmtp [email protected]
rm $MailFile

最後に、1時間に1回正確に同時に7つのテストスクリプトをすべて実行するcrontabを作成しました。これを「ライブ」スクリプトに書き込む場合は、同じ変数を使用して同じ「サブ添字」にアクセスする複数のスクリプトで競合が発生しないようにするために、これを行います。これまで、最初の2回のcrontabの実行中に5回の電子メールのみが届きました。最近(3番目)にこれを行ったときに7つの電子メールがすべて届きました。 (7つのログファイルはすべて毎回正しく生成されます)

ベストアンサー1

変数はスクリプト間で共有されません。環境変数は子プロセスにコピーされます(子プロセスが起動したとき)。情報は後方にも横にも流れず、プロセスの開始後も流れません。

同じレシピに従う二人のようなものです。
プロセスは2つの部分で構成されています。

  • 次のレシピは、セカンダリストレージ(ディスク)に保存されているコードです。プロセスはこれを変更できません。プロセス間で共有できます(不変なので共有副作用はありません)。まるで彼ら全員が一つぐらいは持っているようです(自分だけの料理本も含む)。
  • 状態:変数などこれはこれを変更できます。共有されません。一部初期の状態はレシピまたは親から取得されます。ただし、変更は共有されません。彼らはすべて紙にメモを取るのと同じです。どちらも自分がどれだけ移動したかを追跡します(プログラムカウンター)。 (これらのどれも共有されません)。

メールの場合、メールの送信コードによって異なります。

おすすめ記事