Linux: блокировка файлов с помощью скрипта Python, который работает внутри контейнера докеровLinux

Ответить Пред. темаСлед. тема
Anonymous
 Linux: блокировка файлов с помощью скрипта Python, который работает внутри контейнера докеров

Сообщение Anonymous »

Текущая ситуация:
Я запускаю Docker-контейнер на ПЛК WAGO PFC200 (специальная встроенная прошивка Linux).
Контейнер запускает скрипт Python, который собирает системную информацию, такую ​​как загрузка процессора, использование памяти и т. д., и записывает ее в файл .json. Этот процесс повторяется через 3 секунды в бесконечном цикле while.
Файл записывается в созданный подкаталог файловой системы контейнера «/app/out», который смонтирован в «/tmp». файловой системы Linux.
Цель
Открыть и циклически прочитать json-файл из программы, работающей в среде выполнения codesys на контроллере.< /p>
Проблема
При открытии файла .json бывают случаи, когда файл json является синтаксически неверным. Это происходит при тестировании программы ПЛК в Codesys IDE, а также при открытии файла из файлового браузера mobaXterm (браузер файлов FTP). Однако проблема так и не возникла, когда я открыл файл в SSH-сеансе с помощью NANO.
3 примера неправильных файлов:

Код: Выделить всё

{
"Operating System": "Linux",
"CPU Load": 26.0,
"CPU Average Load (1, 5, 15 minutes)": [
1.48828125,
2.6689453125,
2.6484375
],
"Total RAM": 512839680,
"Used RAM": 99794944,
"Shared RAM": 3022848,
"Total Swap Size": 0,
"Available Swap Size": 0
}e": 0
}

{
"Operating System": "Linux",
"CPU Load": 14.9,
"CPU Average Load (1, 5, 15 minutes)": [
1.5234375,
1.2978515625,
1.8134765625
],
"Total RAM": 512839680,
"Used RAM": 96014336,
"Shared RAM": 3035136,
"Total Swap Size": 0,
"Available Swap Size": 0
} 0
}

{
"Operating System": "Linux",
"CPU Load": 32.0,
"CPU Average Load (1, 5, 15 minutes)": [
1.1513671875,
1.2685546875,
1.265625
],
"Total RAM": 512839680,
"Used RAM": 98611200,
"Shared RAM": 3125248,
"Total Swap Size": 0,
"Available Swap Size": 0
}": 0
}
*Мои наблюдения
  • Неправильные файлы всегда имеют часть к ним добавляется конец самого json (например, "e": 0
    }")
  • Эта ошибка всегда сопровождается из-за долгой загрузки и экрана загрузки:
    введите описание изображения здесь
  • Это происходит примерно каждый 5-10-й раз при открытии файл
Мое предположение
Кажется иметь какое-то отношение к файлу, в который записывается, одновременно с его открытием и чтением.
Что я уже пробовал
  • Добавление «fctnl» в скрипт Python

Код: Выделить всё

def write_to_json(data, filename):
with open(filename, 'w') as file:
try:
# Acquire an exclusive lock on the file
print("Acquiring lock...")
fcntl.flock(file, fcntl.LOCK_EX)
print("Lock acquired.")

# Write the system information to the file
json.dump(data, file, indent=4)

# Ensure data is written to disk
file.flush()
os.fsync(file.fileno())
finally:
# Release the lock
print("Releasing lock...")
fcntl.flock(file, fcntl.LOCK_UN)
print("Lock released.")
  • пытаемся зарегистрировать операции с файлом с помощью strace
  • пытаемся зарегистрировать операции консольной команды «flock»
Результат< /p>
  • Все «отладочные» отпечатки («Получение блокировки...» и т. д.) циклически появляются в консоли контейнера
  • Проблема все еще сохраняется
  • strace показывает только открытие, чтение, запись и т. д., но не блокировка
  • Я не могу использовать вместо этого «auditd», так как он не установлен, и я не могу установить новые пакеты
Мои вопросы
  • Есть ли какой-нибудь другой способ отследить операции блокировки файлов, чтобы проверить, работает ли fcntl скрипта?
  • Может ли вообще работает, потому что файл записывается в смонтированный каталог, а сценарий Python не «достигает» файловой системы Linux при своем вызове?
  • Есть ли какие-либо другой способ ограничить чтение и запись файла одновременно (если это вообще проблема)?
  • Какие еще причины могут привести к показанному поведению?
Заранее спасибо за ответы!
Надеюсь, я добавил всю необходимую информацию. Дайте мне знать, если вам нужен сам код или что-нибудь еще.


Подробнее здесь: https://stackoverflow.com/questions/787 ... -container
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»