Puncte:2

Scriptul în cron.hourly nu rulează

drapel us

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!

drapel us
1) Dacă `shellcheck` nu afișează nimic, înseamnă că scriptul este corect din punct de vedere sintactic. 2) Vă rugăm să nu utilizați niciodată `chmod 777` pentru a face scripturile care pot fi scrise la nivel mondial (`755` este suficient, `u+rx` este cerința minimă). 3) Partea privind sarcinile zilnice/săptămânale/lunare poate fi eliminată, nu are legătură (și anacron-ul nu este necesar aici; testul spune „execuți comanda din dreapta doar dacă anacron nu este găsit și executabil, caz în care acesta din urmă ia ai grijă de asta!) 4) Ești sigur că problema ta persistă?
drapel hr
btw, dacă decomentați vreodată `#if [[`, va trebui să comutați shebang-ul înapoi la `#!/bin/bash`, deoarece POSIX sh nu acceptă testul extins `[[...]]` în stil ksh
geekygeek avatar
drapel us
Mulțumesc foarte mult pentru sfaturi. Voi ține cont de asta și, de asemenea, voi aplica ceea ce ați menționat pentru scenariul meu
geekygeek avatar
drapel us
Bine, mi-am editat răspunsul pentru a include ceea ce este acum afișat în jurnale.
geekygeek avatar
drapel us
Sigur o să fie, mulțumesc.
Puncte:1
drapel us

Bine, deci se pare că aceasta este o problemă cu Docher. La lansarea comenzilor în Docher prin cron, în loc de -aceasta utilizați numai -i. Acum mi-am schimbat Docher comandă în consecință.

Scriptul schimbat:

#!/bin/sh
exec 1>>/tmp/rclone_Linux_MongoDB_Sync.log 2>&1
/usr/bin/docker exec -i mongodb mkdir /data/dump
/usr/bin/docker exec -i 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 iesire; fi

/usr/bin/rclone sync /data/dump/myDB/MongoDB_Backup:MongoDB_Current

Acum, scriptul poate rula conform intenției și rulează automat în fiecare oră. Remedierea a fost schimbarea -aceasta în Docher comenzi la doar -i.

drapel hr
Amintiți-vă că puteți accepta propriul răspuns ;)
Puncte:0
drapel us

Linia a patra a scenariului pare suspectă, după cum a confirmat shellcheck:

% shellcheck rclone_Linux_MongoDB_Sync
În rclone_Linux_MongoDB_Sync linia 4:
/usr/bin/docker exec -it mongodb mongodump --db dashboarddb -u hifi_dbpc_host ->
    ^-- SC1009: Eroarea de sintaxă menționată a fost în această comandă simplă.
    ^-- SC1073: Nu s-a putut analiza această redirecționare. Remediați pentru a permite mai multe verificări.
    ^-- SC1072: Remediați orice probleme menționate și încercați din nou.
geekygeek avatar
drapel us
Scuze. Se pare că în timpul copierii și lipirii, au existat unele erori. -> Cred că a fost de la pisică, ceea ce indică faptul că linia continuă. Acum am actualizat codul.
geekygeek avatar
drapel us
Când rulez shellscript local, nu se afișează nimic

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.