可以同时访问具有相同变量的公共子脚本的脚本数量是否有限制?

可以同时访问具有相同变量的公共子脚本的脚本数量是否有限制?

我编写了大约 10 个脚本,用于在 Raspberry Pi4(操作系统是 Ubuntu Server)上创建任务的单独日志文件。这些脚本通过 crontab 激活,ssh 查询我的 12 个 Raspberry Pi MotionEye 安全摄像头,并在创建的日志文件和电子邮件中报告它们所做的事情。这些脚本在不同的 cron 时间激活(但是,其中 3 个在整点运行,其中 2 个仅在午夜运行),但运行时有时会重叠。目前,这些脚本几乎可以自我维持。我想做的是创建一个执行电子邮件发送的子脚本,这样如果我进行任何更改,我就不必在每个主脚本中跟上该任务。为了测试这一点,我创建了 7 个测试脚本文件 TestFileA - TestFileG,它们将不同的文本行写入各自的日志文件(6、9、12、4、10、12 和 4 行):

#!/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

最后,我创建了一个 crontab,每小时一次在完全相同的时间执行所有 7 个测试脚本。我这样做是为了确保如果我将其写入我的“实时”脚本中,则多个脚本同时使用相同变量访问同一“子脚本”不会产生任何冲突。到目前为止,前 2 次 crontab 执行,我只收到了 5 封电子邮件。最近(第三次)执行此操作时,我确实收到了全部 7 封电子邮件。 (每次都会正确创建所有 7 个日志文件)。在我写入实时脚本之前,有人发现我所做的事情有什么问题吗?

答案1

变量不在脚本之间共享。环境变量被复制到子进程(当子进程启动时)。信息不会回流,也不会侧向,流程启动后不会流动。

这就像两个人遵循相同的食谱。
一个过程有两个部分:

  • 它遵循的配方:存储在辅助存储(磁盘)上的代码。进程无法改变这一点。它可以在进程之间共享(因为它是不可变的,所以没有共享的副作用)。就像他们都得到了一本(有自己的食谱书)。
  • 它的状态:变量等。它可以改变这个。它不被共享。一些最初的状态来自配方,或者来自父级。但是,更改不会被共享。就像他们都在一张纸上做笔记一样。两个人还记录他们已经走了多远(程序计数器)。 (这些都不是共享的)。

至于电子邮件,则取决于电子邮件发送代码。

相关内容