
folgendes Problem: Ich habe einen Server, der eine Windows-Netzwerkfreigabe mounten muss, um eine Datei darauf zu kopieren. Also habe ich die Freigabe hinzugefügt, fstab
damit sie beim Start gemountet wird.
//192.168.1.xx/share /mnt/networkshare cifs noperm,username=user,password=****** 0 0
Ein Skript führt eine Schleife aus, um die Datei auf die Freigabe wie folgt zu kopieren:
while [ true ]
do
if [ -f /path/to/the/file ]
then
mv /path/to/the/file /mnt/networkshare
fi
done
Das Problem ist, dass der Windows-Computer nachts herunterfährt, wenn er morgens hochfährt. Erstens liegt während dieser Zeit die Last auf dem Server aufgrund des while [true]-Skripts zu 100 % auf einem Kern. Zweitens funktioniert das Mounten manchmal nach dem Hochfahren des Windows-Computers nicht mehr. (ein Crontab * * * * * mount -a
wird ausgeführt, um alles erneut zu mounten.) Die Dateien werden nicht kopiert und das Mounten ist auf dem Server nicht zugänglich. Es muss neu gestartet werden.
Wie kann ich sicherstellen, dass die Bereitstellung immer vorhanden ist, während der Computer eingeschaltet ist? Muss ich die Freigabe vielleicht irgendwie unmounten? Ich kann sie jede Nacht unmounten, aber was ist, wenn der Windows-Computer tagsüber neu gestartet wird? Wie kann ich das while [true]-Skript anhalten, wenn die Bereitstellung nachts nicht vorhanden ist, um die CPU-Auslastung zu verringern?
Vielen Dank für Ihre Hilfe!
Antwort1
Sie können die Halterung überprüfen, bevor Sie versuchen, sie zu bewegen:
df | grep "/mnt/networkshare" |grep -v grep >/dev/null; r=${?}
if [ ${r} -eq 0 ]
then
mv /path/to/the/file /mnt/networkshare
fi
außerdem sleep
könnte das Hinzufügen eines Befehls zum Prozess Ihr Problem der 100%igen CPU-Auslastung abmildern. Einen Prozess ohne Pause zu hämmern, ist kein guter Ansatz.