Am urmatorul fisier in /etc/cron.hourly
. Scopul acestui script este acela de a crea o copie de rezervă de descărcare Docker-MongoDB la fiecare oră și apoi de a utiliza rclone pentru a sincroniza acest fișier de descărcare cu conținutul dintr-un folder Google Drive.
Numele scriptului:
rclone_Linux_MongoDB_Sync
Scenariul:
#!/bin/sh
/usr/bin/docker exec -it mongodb mkdir /data/dump
/usr/bin/docker exec -it mongodb mongodump --db myDB -u theUser -p thePassword --gzip --out /data/dump/
# Fișierul de configurare RClone
RCLONE_CONFIG=/home/ubuntu/.config/rclone/rclone.conf
exportați RCLONE_CONFIG
#if [[ "`pidof -x $(nume de bază $0) -o %PPID`" ]]; apoi iesi; fi
/usr/bin/rclone sync /data/dump/myDB/MongoDB_Backup:MongoDB_Current
Am făcut:
sudo chmod +x /etc/cron.hourly/rclone_Linux_MongoDB_Sync
sudo chmod 777 /etc/cron.hourly/rclone_Linux_MongoDB_Sync
Observați cum nu am .SH
extensie pentru script.Anterior, aceasta a fost problema mea. Acum, când rulez următoarele, scriptul meu se afișează.
run-parts --test /etc/cron.hourly
De asemenea, scriptul meu rulează corect când fac:
./rclone_Linux_MongoDB_Sync
De asemenea, rulează când fac:
run-parts /etc/cron.hourly
Am verificat /etc/crontab cu:
cat /etc/crontab
O parte din rezultat este următorul. După înțelegerea mea, acest lucru este corect.
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * test rădăcină -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 test rădăcină -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * test rădăcină -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Am evaluat jurnalele pentru cron cu următoarele:
grep CRON /var/log/syslog
Pentru zilnic, săptămânal și lunar, cred că anterior nu funcționau din cauza neinstalării anacronului. Am instalat anacron cu:
sudo apt-get install anacron
cron.hourly rulează la marca de 17 minute a orei, după cum este indicat de /etc/crontab
. Corespunzător acestui lucru, văd următoarele repetate de fiecare dată, cu un marcaj temporal de 17.
19 iulie 17:17:01 vps-fac5a33c CRON[1039453]: (rădăcină) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 iulie 17:17:09 vps-fac5a33c CRON[1039452]: (rădăcină) MAIL (a trimis prin poștă 104 octeți de ieșire, dar a primit starea 0x004b de la MTA#012)
19 iulie 18:17:01 vps-fac5a33c CRON[1045250]: (rădăcină) CMD (cd / && run-parts --report /etc/cron.hourly)
19 iulie 18:17:18 vps-fac5a33c CRON[1045249]: (rădăcină) MAIL (a trimis prin poștă 104 octeți de ieșire, dar a primit starea 0x004b de la MTA#012)
19 iulie 19:17:01 vps-fac5a33c CRON[1051174]: (rădăcină) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 iulie 19:17:21 vps-fac5a33c CRON[1051173]: (rădăcină) MAIL (a trimis prin poștă 104 octeți de ieșire, dar a primit starea 0x004b de la MTA#012)
Poate că sunt unele lucruri pe care le-am făcut pe care le-am uitat și nu sunt enumerate aici.Cu toate acestea, nu înțeleg de ce nu funcționează. Am evaluat multe postări diferite pe forum, am încercat procesul lor, dar nu funcționează pentru mine.
De ce scriptul meu nu rulează la fiecare oră când este introdus /etc/cron.hourly
?
Nu rulează de la sine. Ar trebui să ruleze la fiecare oră.
Ca o notă suplimentară, scriptul meu avea anterior:
#!/bin/bash
Cu toate acestea, pe baza unor postări, l-am schimbat în:
#!/bin/sh
Când alerg shellcheck
pe scriptul meu, nu este afișat nimic, ceea ce indică faptul că este în regulă conform shellcheck
si este corect din punct de vedere sintactic:
shellcheck rclone_Linux_MongoDB_Sync
S-au adăugat următoarele în partea de sus a scriptului după #!/bin/sh
. Aceasta este pentru a vedea ce erori apar în cadrul scriptului în timpul execuției.
exec 1>>/tmp/rclone_Linux_MongoDB_Sync.log 2>&1
Am schimbat crontab pentru .hourly cu un timp recent pentru a nu trebui să aștept până la 17 minute pentru a rula. Datorită adăugării de mai sus la fișierul meu script, a fost creat următorul fișier:
/tmp/rclone_Linux_MongoDB_Sync.log
După alergare:
cat /tmp/rclone_Linux_MongoDB_Sync.log
A fost afișat următoarele.
dispozitivul de intrare nu este un TTY
dispozitivul de intrare nu este un TTY
Multumesc tuturor!