Closed kurmann closed 3 months ago
Lieber ChatGPT. Die Log-Rotation hat immer noch das Problem, das meine .NET-Anwendung einfach nicht mehr startet sobald die erste Rotation stattgefunden hat. Kann ich nicht auf andere Weise dafür sorgen, dass meine Logs nicht zu gross werden? Von mir aus gesehen, kann man die Logs jede Nacht leeren
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.swiss.kurmann.videoschnitt-FinalCutPro</string>
<key>ProgramArguments</key>
<array>
<string>/Users/patrickkurmann/bin/Kurmann/VideoschnittConsole/Kurmann.Videoschnitt.ConsoleApp</string>
<string>--workflow</string>
<string>FinalCutPro</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>StartOnMount</key>
<false/>
<key>WatchPaths</key>
<array>
<string>/Users/patrickkurmann/Movies/Final Cut Export/4K60</string>
<string>/Users/patrickkurmann/Movies/Final Cut Export/4K30</string>
<string>/Users/patrickkurmann/Movies/Zur Mediathek</string>
</array>
<key>StandardOutPath</key>
<string>/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.FinalCutPro.log</string>
<key>StandardErrorPath</key>
<string>/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.FinalCutPro.error.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>ASPNETCORE_ENVIRONMENT</key>
<string>Production</string>
<key>MediaSetOrganizer__InputDirectory</key>
<string>/Users/patrickkurmann/Movies/Zur Mediathek</string>
<key>MediaSetOrganizer__FinalCutExportDirectory</key>
<string>/Users/patrickkurmann/Movies/Final Cut Export</string>
<key>MediaSetOrganizer__MediaSetPathLocal</key>
<string>/Users/patrickkurmann/Movies/Mediensets</string>
</dict>
</dict>
</plist>
Um zu verhindern, dass die Logs zu groß werden, ohne die Log-Dateien zu rotieren und ohne deine .NET-Anwendung neu zu starten, kannst du ein einfaches Skript verwenden, das die Log-Dateien jede Nacht leert. Dabei bleibt die Anwendung aktiv und die Logs werden auf eine kontrollierte Weise verwaltet.
Hier ist ein Schritt-für-Schritt-Ansatz:
Erstelle ein Shell-Skript, um die Log-Dateien zu leeren:
Erstelle ein Skript namens clear_logs.sh
im gewünschten Verzeichnis. Zum Beispiel im Home-Verzeichnis:
nano ~/clear_logs.sh
Füge den folgenden Inhalt in das Skript ein:
#!/bin/bash
# Liste der Log-Dateien
log_files=(
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.FinalCutPro.log"
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.FinalCutPro.error.log"
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.InfuseMediaLibrary.log"
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.InfuseMediaLibrary.error.log"
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.MediaSetIndex.log"
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.MediaSetIndex.error.log"
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.MetadataXml.log"
"/Users/patrickkurmann/Library/Logs/kurmann-videoschnitt.MetadataXml.error.log"
)
# Leere jede Log-Datei
for log_file in "${log_files[@]}"
do
: > "$log_file"
done
echo "Log-Dateien wurden geleert."
Speichere das Skript und mache es ausführbar:
Speichere die Datei in nano
mit Ctrl + O
und schließe sie mit Ctrl + X
. Mache das Skript dann ausführbar:
chmod +x ~/clear_logs.sh
Erstelle eine LaunchAgent plist
-Datei, um das Skript jede Nacht auszuführen:
Erstelle eine neue plist
-Datei im Verzeichnis ~/Library/LaunchAgents
. Zum Beispiel:
nano ~/Library/LaunchAgents/com.swiss.kurmann.clearlogs.plist
Füge den folgenden Inhalt in die plist
-Datei ein:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.swiss.kurmann.clearlogs</string>
<key>ProgramArguments</key>
<array>
<string>/Users/patrickkurmann/clear_logs.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>0</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Lade den LaunchAgent neu:
Lade den neuen LaunchAgent:
launchctl load ~/Library/LaunchAgents/com.swiss.kurmann.clearlogs.plist
Um sicherzustellen, dass der LaunchAgent bei jedem Start des Systems geladen wird, kannst du dies mit dem folgenden Befehl überprüfen:
launchctl list | grep com.swiss.kurmann.clearlogs
Testen des Skripts:
Teste das Skript manuell, um sicherzustellen, dass es wie erwartet funktioniert:
~/clear_logs.sh
Dieser Ansatz stellt sicher, dass die Log-Dateien jede Nacht geleert werden, ohne dass deine .NET-Anwendung neu gestartet oder unterbrochen wird. Die Logs werden einfach auf eine kontrollierte Weise verwaltet, und du musst dir keine Sorgen machen, dass sie zu groß werden.
(...)
Die Fehlermeldungen Permission denied
weisen darauf hin, dass das Skript nicht die erforderlichen Berechtigungen hat, um die Log-Dateien zu ändern. Um diese Berechtigungen zu erhalten, kannst du das Skript mit sudo
ausführen oder die Berechtigungen der Log-Dateien so ändern, dass dein Benutzer darauf zugreifen kann.
Hier sind die Schritte, um das Skript mit sudo
auszuführen:
Aktualisiere das Skript, um mit sudo
ausgeführt zu werden:
Da du das Skript manuell oder über einen LaunchAgent ausführen wirst, kannst du sicherstellen, dass es mit den erforderlichen Berechtigungen ausgeführt wird.
Das Skript ausführen:
Führe das Skript manuell mit sudo
aus:
sudo ~/clear_logs.sh
LaunchAgent mit sudo einrichten:
Passe den LaunchAgent an, um das Skript mit sudo
auszuführen. Dies ist jedoch nicht direkt möglich, da sudo
in diesem Kontext nicht funktioniert. Stattdessen kannst du einen Wrapper verwenden, der das Skript mit sudo
ausführt.
Erstelle einen neuen Wrapper für das Skript:
nano ~/clear_logs_wrapper.sh
Füge den folgenden Inhalt in den Wrapper ein:
#!/bin/bash
sudo /Users/patrickkurmann/clear_logs.sh
Speichere die Datei und mache sie ausführbar:
chmod +x ~/clear_logs_wrapper.sh
Passe den LaunchAgent an, um den Wrapper auszuführen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.swiss.kurmann.clearlogs</string>
<key>ProgramArguments</key>
<array>
<string>/Users/patrickkurmann/clear_logs_wrapper.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>0</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Lade den LaunchAgent neu:
Lade den neuen LaunchAgent:
launchctl load ~/Library/LaunchAgents/com.swiss.kurmann.clearlogs.plist
Hinweis: Die Verwendung von sudo
in einem Skript, das regelmäßig ausgeführt wird, kann ein Sicherheitsrisiko darstellen. Eine alternative Lösung besteht darin, die Berechtigungen der Log-Dateien so zu ändern, dass der Benutzer darauf zugreifen kann.
Alternative Lösung: Berechtigungen ändern
Ändere die Berechtigungen der Log-Dateien:
sudo chmod 644 /Users/patrickkurmann/Library/Logs/kurmann-videoschnitt*.log
Dies gibt deinem Benutzer Lese- und Schreibrechte für die Log-Dateien.
Führe das Skript erneut aus:
~/clear_logs.sh
Damit sollte dein Skript in der Lage sein, die Log-Dateien zu leeren, ohne auf Berechtigungsprobleme zu stoßen.
Jetzt ist es mir zu komplex. Das kann doch nicht sein ein anständiges Log hinzukriegen. Ich ändere die Strategie und lasse die Log-Datei von .NET erstellen