Puncte:0

Nu se poate face ca crontab să funcționeze așa cum era de așteptat

drapel id

Vreau să fac o copie de rezervă zilnică a directorului meu principal executând următorul script (pot scrie în /home):

   #!/bin/sh -e
   cd /acasă
   ls -l 
   rm -f silbar.tar.gz
   ecou "pornind tar"
   tar -czf silbar.tar.gz silbar
   cd ./silbar
   ecou "terminat cu gudron"
   bip

Pentru a face acest lucru, am creat fișierul meu personal crontab introducând ~$ crontab -e și am adăugat următoarele (și numai rândul care nu este un comentariu)

30 6 * * * mybackup.script 

presupunând că crontab-ul meu ar rula în directorul meu de acasă.

Dar nu se întâmplă nimic. Efectuarea ~$ grep CRON /var/log/syslog arată, în afară de lucrurile root, următoarea eroare:

Aug 30 06:30:01 Puma CRON[100126]: (silbar) CMD (mybackup.script )

Aug 30 06:30:01 Puma CRON[100125]: (CRON) informații (Fără MTA instalat, renunțarea la ieșire)

Deci, cu ce greșesc? Ce este MTA, oricum?

user535733 avatar
drapel cn
Scriptul dvs. are o eroare. Nu știm care este eroarea. Cron încearcă să vă trimită mesajul de eroare prin e-mail, dar sistemul dumneavoastră nu este configurat pentru asta. În loc să vă rătăciți despre configurarea unui MTA pentru cron, pur și simplu redirecționați rezultatul erorii către un fișier, astfel încât să îl puteți citi.
user535733 avatar
drapel cn
Exemplu: `30 6 * * * /home/silbar/mybackup.script > /home/silbar/backup.log 2>&1`
drapel cn
vă rugăm să nu utilizați /home pentru fișierele personale. Singurul lucru acolo ar trebui să fie directoare de utilizatori. Pune-le în altă parte; de asemenea, nu puneți niciodată mai mult de 1 acasă în fișierul tar; folosiți 1 fișier per /home/USER/ și puneți-l în /home/USER (considerați că este „o practică mai bună”). Este o încălcare a confidențialității dacă nu o faci. Și folosiți întotdeauna căi absolute când utilizați cron. Este cea mai sigură metodă. Nu este necesar „rm”. „tar” în mod implicit suprascrie fără a cere.
Puncte:1
drapel cn

Poate fi necesar să introduceți calea completă a scriptului în cronjob.

Cronjob-urile rulează într-un mediu aproape gol. Astfel, executabilele nu pot fi găsite. Același lucru este valabil și pentru comenzile din script: furnizați căi complete către comenzi sau configurați o variabilă PATH în scriptul dvs.

Puncte:0
drapel it

Începând cu #!/bin/sh -e, faci ca scriptul să ruleze cu SH (basheste mai bine IMHO) și -e iese la orice eroare (set de om), deci nu se pot gestiona erorile. Scriptul tău eșuează și cron încearcă să vă trimită jurnalul prin e-mail. cron nu poate găsi un agent de transfer de mesaje (MTA). E-mailul nu a fost configurat pe sistemul dvs., nici măcar pentru livrare locală.

Locuri de muncă rulează cron, sau systemd Scripturile de pornire nu sunt rulate în același mediu de rulare pe care îl aveți pe desktop. systemd scripturile de pornire sunt rulate ca rădăcină. Nici unul dintre voi CALE modificări sau alte setări ale variabilelor de mediu din ~/.bashrc sunt propagate automat către dvs cron loc de munca. De exemplu, nu există $DISPLAY, deci programele GUI au nevoie de un tratament special (citiți man xhost).

Se pot seta variabile de mediu pentru toate cron locuri de muncă în crontab fişier Citit om 5 crontab.

Uită-te la rezultatele echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias în fiecare dintre mediile dumneavoastră.

De când comanda parte a crontab linia este, implicit, interpretată de /bin/sh, care are o sintaxă mai simplă decât /bin/bash, recomand să aveți comanda fii un apel către a bash script (executabil, montat, începe cu #!/bin/bash) care configurează mediul, apoi apelează programul dorit.

Puncte:0
drapel id

Wow!, răspunsuri foarte utile de la user535733, Rinzwind, Vanadium și waltinator. Acum funcționează așa cum s-a sugerat, folosind căi bash și complete. Backup-ul merge acum pe o unitate flash (care este acolo unde am vrut să meargă, oricum) în loc de către /home.

Mulțumesc tuturor, Dick

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.