Puncte:1

Cum pot afla de ce crontab-ul meu nu funcționează?

drapel in

Sunt un începător... O să primesc asta imediat. Am un server simplu Ubuntu 20.04 LTS folosit doar ca server Minecraft.

Crontab-ul îmi dă câteva probleme

*/10 * * * * ecran -S minecraft -p 0 -X chestii „salva-toate^M”
@reboot /home/minecraft/startserver.sh
@daily find /home/minecraft/backup/* -mtime +6 -type f -delete
@zip zilnic -9 -r --exclude=*backup* --exclude=*web* --exclude=*rapoarte de blocare* --exclude=*pierdut+găsit* /home/minecraft/backup/$(data + „%Y.%m.%d %I.%M %P”).zip /home/minecraft

Prima linie funcționează, dar @daily și @reboot nu funcționează deloc. TOATE comenzile funcționează de la terminal fără eroare.

Vă rog să mă ajutați să înțeleg asta, nu am experiență cu Linux și încerc să-mi dau seama. Sunt conștient de faptul că unii oameni ar putea crede că acest lucru ar fi mai bine gestionat cu systemd, dar sunt prea nou pentru a-mi da seama încă și nu vreau să instalez un script pe care nu îl pot repara.

De ce crontab eșuează aceste linii? Nu cred că sunt permisiuni. Vă rog să mă ajutați să depanez asta

Mulțumesc pentru timpul acordat

EDITARE: OK, după ce am căutat, problema cu script-ul startserver a fost în script-ul în sine și nu în crontab. Am aflat că trebuie să am -d flag pentru comanda ecranului în crontab.

Comanda zip funcționează, dar nu îmi pot da seama ce cod de escape să folosesc pentru a adăuga spații în dată backup/$(data +"\%Y.\%m.\%d \%I.\%M \%P").zip Folosind o bară oblică \ sau folosind " " nu lucra. Dacă cineva știe cum să evadeze dintr-un spațiu creând fișiere zip, vă rog să-mi spuneți.

Mi s-a spus în comentarii să folosesc formatul potrivit pentru editarea postării. Nu știu ce înseamnă asta, aceasta este prima mea postare.

drapel vn
Bună Cronie! Bun venit la AskUbuntu! Sunt ^M două caractere (^ și M) sau un întoarcere de cărucior în format Windows? Dacă există o întoarcere de trăsură necinstită acolo, atunci este posibil ca cele 3 rânduri ulterioare să nu fie interpretate corect.
Cronie avatar
drapel in
@tu-ReinstateMonica-dorduh Acea linie trimite o comandă către serverul Minecraft într-un ecran. ^M este între ghilimele, nu ar trebui să îl sechestreze? --Edit: Am comentat acea linie și nu a rezolvat problema.
drapel au
Trebuie să evadați caracterele `%` (`...data +"\%Y.\%m.\%d \%I.\%M \%P"...`) (vezi [aici]( https://unix.stackexchange.com/questions/119450)), și probabil ar trebui să citeze și caracterele metalice din comanda `zip` (de exemplu, `--exclude="*backup*"`) (dar nu și în `find` ` comanda). Dincolo de asta, aș înregistra ieșirile și erorile din comenzi adăugând ceva de genul `>>/tmp/minecraftserver.log 2>&1` la fiecare linie (dar cu un nume de fișier diferit pentru fiecare), apoi verificând acele fișiere jurnal la vezi dacă dau o indicație despre ce se întâmplă.
drapel au
Mai multe informații de depanare [aici](https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working) și [aici](https://serverfault.com/questions/449651/why- crontab-ul-meu-nu-funcționează-și-cum-pot-depana).
drapel au
@Cronie să adauge spații în numele fișierului este dificil, deoarece amândoi trebuie să puneți ghilimele în jurul șirului de format la `date` pentru a-i spune că există un spațiu *în* argument (mai degrabă decât între argumente), *și* trebuie, de asemenea, să pune ghilimele duble în jurul chestiei `$( )` pentru a spune shell-ului să nu împartă în cuvinte rezultatul pe care îl primește. Probabil că cel mai curat este să citați întreaga cale a fișierului: `... "/home/minecraft/backup/$(data +"\%Y.\%m.\%d \%I.\%M \%P" ).zip" ...`. BTW, am secund recomandarea waltinator de a pune acest lucru într-un script (și de a elimina acele escape) și doar ca intrarea cron să ruleze scriptul.
Puncte:0
drapel it

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ările sau alte setări ale variabilelor de mediu 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ă.

Din momentul în care 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.

Cronie avatar
drapel in
Ne pare rău, ar fi trebuit să menționez că aceasta nu este GUI Ubuntu, serverul este doar terminal. Am introdus comanda ```echo``` pe care ați sugerat-o și a oferit multe pagini de informații pe care nu sunt echipat să le descifrez. Nu am fost clar dacă intenționați să adăugați ```#!bin/bash``` la crontab sau la scripturile pe care le apelez. Scripturile pe care le rulez au deja ```#!bin/bash``` în antetul lor
waltinator avatar
drapel it
Rulați comenzile `echo` în mediul dvs. terminal, salvând rezultatele într-un fișier Reluați-le prin `crontab`, salvând rezultatele într-un fișier diferit. Comparați fișierele `diff file1 file2 | mai putin`. Unele variabile de mediu lipsesc din fișierul generat de „crontab” sau au valori diferite, de ex. `CALEA`. Deoarece câmpul `crontab` `command` este interpretat cu sintaxa `/bin/sh`, oamenii încearcă adesea din greșeală să folosească `/bin/bash mai avansat
waltinator avatar
drapel it
Deoarece câmpul `crontab` `command` este interpretat cu sintaxa `/bin/sh`, oamenii încearcă adesea din greșeală să folosească o sintaxă mai avansată `/bin/bash`. Astfel, recomand să aveți doar o referință la script ca ` crontab` `command` (`/usr/local/bin/script7`) și salvarea isteții, codul de depanare, generarea comenzii, teste („Este a doua zi de marți?”.) pentru `script7`, care începe cu `#!/bin/bash`.
waltinator avatar
drapel it
Vă rugăm să [editați] postarea pentru a adăuga informații noi, formatate corespunzător. Informațiile adăugate prin comentarii sunt greu de format pentru tine, greu de citit pentru noi și ignorate de viitorii cititori. Dați clic pe [editați] și adăugați acele informații vitale la întrebarea dvs., astfel încât toate faptele de care avem nevoie să fie în întrebare. Vă rugăm să nu utilizați Adăugare comentariu, deoarece acesta este legătura noastră ascendentă către dvs. Toate informațiile despre sistemul dvs. ar trebui să apară în Întrebarea cu[editare]

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.