Python Watchdog с выходом Slurm - PullRequest
       65

Python Watchdog с выходом Slurm

0 голосов
/ 01 апреля 2020

Я пытаюсь использовать python -watchdog для мониторинга вывода заданий SLURM на суперкомпьютер. По какой-то причине сторожевая программа не обнаруживает изменения в файлах, даже если tail -f показывает, что файл действительно изменяется. Вот моя сторожевая программа:

import logging
import socket
import sys
import time

from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler



logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s - %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',
                    filename="/work/ollie/pgierz/PISM/pindex_vostok_ds50/scripts/pindex_vostok_ds50.watchdog")

def on_created(event):
    logging.info(f"hey, {event.src_path} has been created!")


def on_deleted(event):
    logging.info(f"what the f**k! Someone deleted {event.src_path}!")


def on_modified(event):
    logging.info(f"hey buddy, {event.src_path} has been modified")


def on_moved(event):
    logging.info(f"ok ok ok, someone moved {event.src_path} to {event.dest_path}")


if __name__ == "__main__":
    if "ollie" in socket.gethostname():
        logging.info("Not watching on login node...")
        sys.exit()
    # Only do this on compute node:
    patterns = "*"
    ignore_patterns = "*.watchdog"
    ignore_directories = False
    case_sensitive = True
    my_event_handler = PatternMatchingEventHandler(
        patterns, ignore_patterns, ignore_directories, case_sensitive
    )


    my_event_handler.on_created = on_created
    my_event_handler.on_deleted = on_deleted
    my_event_handler.on_modified = on_modified
    my_event_handler.on_moved = on_moved

    path = "/work/ollie/pgierz/PISM/pindex_vostok_ds50/scripts"
    #path = "/work/ollie/pgierz/PISM/pindex_vostok_ds30/"
    go_recursively = True
    my_observer = Observer()
    my_observer.schedule(my_event_handler, path, recursive=go_recursively)

    my_observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        my_observer.stop()
        my_observer.join()

Это просто подозрение, но может ли файловая система фактически не зарегистрировать файл как «измененный», так как он все еще открыт из пакетного задания? Выполнение ls -l или stat для выходных файлов показывает, что оно было «изменено» при запуске задания. Нужно ли указывать slurm на "flu sh" файл?

...