Ich habe ein Programm, in dem die Einstellungen gespeichert sind ~/.config/myprogram
dass ich sowohl interaktiv als auch mit einem Batch-Queuing-System verwende. Wenn ich interaktiv laufe, möchte ich, dass dieses Programm meine Konfigurationsdateien verwendet (und das tut es auch). Im Batch-Modus sind die Konfigurationsdateien jedoch nicht erforderlich, da ich Befehlszeilenoptionen spezifiziere, mit denen alle relevanten Einstellungen überschrieben werden. Darüber hinaus verlängert der Zugriff auf die Konfigurationsdateien über das Netzwerk die Startzeit des Programms um einige Sekunden. Wenn die Dateien nicht vorhanden sind, wird das Programm viel schneller gestartet (da jeder Job nur etwa eine Minute dauert, hat dies erhebliche Auswirkungen auf den Durchsatz von Batch-Jobs). Da ich das Programm aber auch interaktiv verwende, möchte ich meine Konfigurationsdateien nicht ständig verschieben / löschen. Abhängig davon, wann meine Stapeljobs im Cluster geplant werden (basierend auf der Verwendung durch andere Benutzer),
(Abgesehen davon, dass die Leistung von Netzwerkdateien so langsam ist, ist wahrscheinlich ein Fehler, aber ich bin nur ein Benutzer des Clusters, sodass ich ihn nur umgehen und nicht reparieren kann.)
Ich könnte eine Version des Programms erstellen, die die Konfigurationsdateien nicht liest (oder keine Befehlszeilenoption hat), aber die Build-Umgebung dieses Programms ist schlecht entwickelt und schwierig einzurichten. Ich würde es vorziehen, die Binärdateien zu verwenden, die über den Paketmanager meines Systems installiert wurden.
Wie kann ich bestimmte Instanzen dieses Programms dazu bringen, so zu tun, als ob meine Konfigurationsdateien nicht existieren (ohne das Programm zu ändern)? Ich hoffe auf einen Umschlag des Formulars pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options...
, bin aber offen für andere Lösungen.
LD_PRELOAD
Hook verwenden. Das ist einfacher (Sie können das in ein oder zwei Stunden implementieren, wenn Sie C kennen) als die Alternative ptrace
. Sie könnten wahrscheinlich auch fakechroot verwenden, um dies zu tun (das ist, glaube ich, LD_PRELOAD).