Ich arbeite derzeit an einem Backup-Skript, um mich bei meinem Produktionsserver anzumelden und die neuesten SQL-Dumps auf meinen Staging-Server zu ziehen. Ich habe kein Problem damit, die SQL-Dumps zu ziehen, aber ich habe ein Problem damit, die letzten Backup-Dateien in einen temporären Ordner zu verschieben.
Mein Backup-Skript-Benutzer:mysqlBackupUser
Ich verwende das Home-Verzeichnis dieses Benutzers als Speicherort für dieses Skript und zum Speichern der Backups. Die Ordnerstruktur ist:
/home
|- mysqlBackupUser
|- .ssh
|- backups
|- bin
Mein Skript sitzt drin bin
und die Backups werden in das backups
Verzeichnis heruntergeladen
Das backups
Verzeichnis enthält außerdem andere Ordner zum Organisieren des Servers und der Art der Sicherungen. Beispiel:
/backups
|-mysql
|- production1
|- production2
|-misc
|- production1
|- production2
Bisher ist alles in Ordnung und funktioniert wie erwartet. Das Problem ist, wenn ich mich in folgendem Zustand befinde (nicht darauf beschränkt):
/home/mysqlBackupUser/backups/mysql/production1/
wenn ich das temporäre Verzeichnis mit dem Namen erstelle _lastBackUp
und versuche, meine vorherigen Backups dorthin zu verschieben, erhalte ich:
find: Failed to change directory: Permission denied
Mein Code hierfür ist:
local tmpBackUpDir="${LOCAL_LOCATION_DIR}/_lastBackUp/"
# Ensure the directory exist
mkdir -p "${tmpBackUpDir}"
# move any previous files to bak
find "${LOCAL_LOCATION_DIR}/" -type f -exec mv -t "${LOCAL_BAKUP_DIR}" {} \+;;
Zur Klarheit:
LOCAL_LOCATION_DIR = /home/mysqlBackupUser/backups/mysql/production1
tmpBackUpDir = /home/mysqlBackupUser/backups/mysql/production1/_lastBackUp/
Um zu verstehen, wie das Skript verwendet wird: Derzeit bin ich als mein Benutzer angemeldet und ich bin
sudo su mysqlBackupUser
Als Benutzer. Ich bin nicht sicher, ob dies das Problem ist, und ich kann es nicht testen, indem ich mich als dieser Benutzer anmelde. Das Skript wird von Cron ausgeführt und verhält sich als dieser Benutzer (Schlüssel sind so eingerichtet, dass die Automatisierung für diesen Benutzer einfacher ist), um den Vorgang auszuführen. Daher bin ich nicht sicher, ob dies wirklich das Problem ist.
Ich habe die Eigentümerschaft und Berechtigungen aller Ordner überprüft, auch die des Ordners, der _lastBackUp
mir gehört mysqlBackupUser
. Ich habe _lastBackUp
zum Testen sogar 777 eingestellt und trotzdem wurden mir die Berechtigungen verweigert ...
Mein kompletter Fehler ist:
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: failed to restore initial working directory: Permission denied
Jeder find: Failed to change directory: Permission denied
ist für jede Datei, die ich verschieben möchte_lastBackUp
Vielen Dank für alle Einblicke in dieses Thema.
Antwort1
Der Fehler scheint darin zu liegen, dass keine Berechtigung fürändernVerzeichnis.
- Stellen Sie sicher, dass der Benutzer mindestens Zugriff
r-x
auf alle Ordner hat, die zu dem Pfad führen, von dem aus das Skript ausgeführt wird. - Überprüfen Sie, ob der Benutzer mindestens
rwx
über den Ordner und die Dateien verfügt, in denen sich die Sicherungen befinden. - Überprüfen Sie, ob der Benutzer eine Login-Shell hat,
$HOME
und$PATH
. Wenn ja, speichern Sie das Skriptcd
an einem relevanten Ort, bevor Sie den Vorgang starten. Wenn nicht, definieren Sie alle Befehle und Speicherorte mitabsolutPfade.
Andere mögliche Ursachen fallen mir nicht ein.
Antwort2
Wenn mkdir funktioniert (was anscheinend der Fall ist), und Sie ein ls -al über das übergeordnete Verzeichnis ausführen, wer ist dann der Eigentümer der Verzeichnisse? Für mich klingt das so, als ob irgendwo etwas mit den Berechtigungen schief läuft.