Puncte:1

De ce crontab -e meu nu execută scriptul .sh?

drapel cn

În sudo crontab -e Am asta:

*/2 * * * * data >> /home/rki/test.log
*/5 * * * * sudo sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh

*/2 * * * * data >> /home/rki/test.log funcționează fără probleme, scriind la fiecare 2 minute în test.log fişier.

Pur și simplu nu va executa backup.sh script care are asta:

#!/bin/bash
# Eliminați copiile de rezervă anterioare
#sudo rm dokuwiki-backup*.tar.gz

# Setați numele de rezervă
nume=dokuwiki-backup_$(data „+%Y-%m-%d-%H%M%S”)

# Lucruri de rezervă
/bin/tar -zcvf „$name.tar.gz” /var/lib/docker/volumes/dokuwiki_data

pot sa fac sudo sh dokuwiki_backup.sh bine fara probleme. Scriptul bash este chmoded 0777 și chown rki:rki.

Ce fac eu gresit?

sudodus avatar
drapel jp
Sarcinile care necesită permisiuni ridicate ar trebui să fie încărcate în cron cu `sudo crontab -e` și nu ar trebui să conțină sudo, așa că încercați cu `*/5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki /backups/dokuwiki_backup.sh`
drapel cn
1. Nu puneți sudo în crontab 2. folosiți căi absolute.
Grumpy ol' Bear avatar
drapel cn
Este `/home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh ` nu o cale absolută?
drapel cn
și nu face niciodată `chmod 0777`. nu utilizați niciodată al treilea 7. 0700 sau 0750 pentru scripturi este cea mai bună securitate când cunoașteți utilizatorul care îl execută. @Grumpyol'Bear este, dar `sh` nu are unul. Cel mai bine este să folosiți întotdeauna căile, chiar dacă calea este în interiorul implicit pentru cron. Nu știm care este calea sistemului dumneavoastră în interiorul cron ;)
Grumpy ol' Bear avatar
drapel cn
Tocmai am testat `*/5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh` fără zaruri. `*/2 * * * * date >> /home/rki/test.log` încă funcționează, încă nu există backup.
sudodus avatar
drapel jp
@Grumpyol'Bear, 1. Poate fi chiar necesar să puneți căi absolute în interiorul shellscript-ului. Motivul este că mediul folosit de `cron` poate fi foarte simplu (nu vă puteți aștepta să fie același cu ceea ce obțineți ca utilizator conectat); 2. Ai folosit `sudo crontab -e`?
Grumpy ol' Bear avatar
drapel cn
Da, întotdeauna `sudo crontab -e`, vreau ca root nu rki. Altfel, aș merge `crontab -e` pentru rki cronjobs.
sudodus avatar
drapel jp
1. Vă sugerez să puneți calea completă și pe apelul „date”; 2. Nu este compatibil să apelați scriptul cu `/bin/sh` și, în același timp, să aveți shebang `#!/bin/bash` în prima linie. Fie apelați cu programul shell, fie folosiți shebang. În acest din urmă caz, scriptul trebuie să fie și executabil.
Grumpy ol' Bear avatar
drapel cn
La naiba cu toate astea, o voi face doar manual.La naiba nu merge...
pLumo avatar
drapel in
Poate că funcționează bine, dar `$name.tar.gz` este relativ și nu știi unde este?
Grumpy ol' Bear avatar
drapel cn
Ah, la naiba... @pLumo, chiar asta a fost. Totul în ./root/ . La naiba sake...
sudodus avatar
drapel jp
Bună captură @pLumo :-)
Puncte:1
drapel in

Dacă adăugați cronjob-ul dvs. prin sudo crontab -e, va rula ca rădăcină.

  • Nu este nevoie de sudo, utilizare:

    */5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh
    
  • Directorul de lucru implicit ar trebui să fie rădăcinăs $HOME, deci de obicei /rădăcină. Puteți găsi $name.tar.gz Acolo. Dar mai bine să folosiți căi absolute, de exemplu:

    /bin/tar -zcvf „/home/rki/Backups/$name.tar.gz” /var/lib/docker/volumes/dokuwiki_data
    
Puncte:-1
drapel cn

Pentru a rula cronjob-uri cu mediu rădăcină complet, utilizați această comandă

*/5 * * * * su - root -c '/home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh'
Grumpy ol' Bear avatar
drapel cn
Fără zaruri. Nu merge.
Thomas Aichinger avatar
drapel cn
Scriptul dvs. poate avea o eroare. Încercați să îl rulați din linia de comandă.

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.