Mam skrypt uruchamiany w cron
celu utworzenia kopii zapasowej bazy danych MySQL i niektórych plików. Po utworzeniu tar smoły i zaszyfrowaniu jej openSSH
muszę umieścić ją na zdalnym serwerze ftp. Poniżej znajduje się kod części ftp:
HOST='abcd.dyndns.biz'
USER='username'
PASSWD='password'
FILE='myBack-'${LOCAL_HOST}'-'${DATENAME}'.enc.tar.gz'
DIRNAME='/usr/local/backups/'
cd ${DIRNAME}
ftp -n ${HOST} <<END_SCRIPT
quote USER ${USER}
quote PASS ${PASSWD}
cd backup
lcd ${DIRNAME}
put ${FILE}
quit
END_SCRIPT
Jeśli bezpośrednio uruchomię skrypt z wiersza polecenia > sudo ./mybackup.sh
, działa on płynnie i umieszczam plik kopii zapasowej na ftp, ale gdy jest uruchomiony cron
, nigdy nie umieścił pliku na ftp przez inne pliki przed ftp i po ftp (takie jak konsolidacja pliku dziennika i wysłanie e-maila wynik) kroki działają dobrze. Nie jestem w stanie uzyskać niczego z plików dziennika ani też wskazać przyczyny.
UWAGA: - Nasz ip dyndns.biz nie zmienia się, ponieważ zapłaciliśmy za abonament.
mail
poleceniem. Czy sprawdziłeś, że cron działa z odpowiednimi uprawnieniami?cron
uruchamia zadanie jako root.crontab -l
?sudo crontab -l
`. # mh dom mon dow polecenie 0 22 * * * / usr / local / backups / osback.sh`Odpowiedzi:
Zamiast tego użyj funkcji przesyłania Curl :
źródło
Umm .. Widzę kilka punktów, dlaczego to może zawieść.
nie rozdzielasz poleceń ftp: // średnikami lub znakami nowej linii - spróbuj dodać \ n lub;. znowu idk, czego chce twoja aplikacja
nie sprawdzasz, czy plik rzeczywiście istnieje, zanim spróbujesz go umieścić.
źródło
sudo ./mybackup.sh
powiedzie? Plik istnieje, ponieważ nadal istnieje po zakończeniu skryptu.Miałem podobny problem. Rozwiązanie: odnieść się bezpośrednio do katalogów bez takich zmiennych:
i zadziałało. Tylko ta zmiana.
quote USER $username
Iquote PASSWD $password
pozostawiano jak jest, ale bez nawiasów klamrowych.źródło