Пусть каждый скрипт проверяет определенный файл (например, / var / tmp / script1-2
).
Если файл проверки не существует, запишите имя другого сценария в файл как можно раньше, чтобы предотвратить его выполнение во время выполнения этого сценария.
Если он существует и содержит собственное имя, то выйдите. В противном случае работайте нормально.
Непосредственно перед выходом каждый сценарий должен записать в файл свое имя.
CHECKFILE="/var/tmp/script1-2"
MYNAME='script1'
OTHERNAME='script2'
[ ! -s "$CHECKFILE" ] && echo "$OTHERNAME" > "$CHECKFILE"
[ -s "$CHECKFILE" ] && grep -qwF "$MYNAME" && exit 1
# rest of script here
.
.
echo "$MYNAME" > "$CHECKFILE"
Параметры grep
:
-q
для тихого, без вывода -w
для сопоставления только целых слов -F
для соответствие фиксированным строкам, а не регулярным выражениям. Примечание: если оба сценария выполняются в точно одновременно и $ CHECKFILE еще не существует, то они оба будут запущены. Имя, которое завершится последним (для запуска требуется больше времени), будет записано в $ CHECKFILE. Чтобы предотвратить это, запустите echo script2> / var / tmp / script1-2
перед запуском любого из них.
Неограниченная гостевая поддержка указывается битом 5 MSR 0x485, поэтому ее можно проверить следующим образом:
sudo modprobe msr
sudo rdmsr --bitfield 5:5 0x485
Если выход равен 1, неограниченный гость поддерживается, если 0 — нет.
rdmsr
доступен в пакете msr-tools
в Debian или Fedora.