Crontab kører ikke script

Søger du et bestemt program? Mangler du et alternativ til dit Windowsprogram? Program-spørgsmål kan stilles her.
MaBoNi
Indlæg: 30
Tilmeldt: 24. maj 2011, 22:54

Crontab kører ikke script

Indlæg af MaBoNi »

Hey

Jeg har en Ubuntu server med MySQL kørende, jeg har lavet et script til at tage fast backup af data'erne i databasen og vil så afvikle dette med crontab. Ved at kører

Kode: Vælg alt

crontab -e

og derefter indsætte denne nederst:

Kode: Vælg alt

0 2 * * * /home/ubuntu/scripts/mysql_backup.sh


I min verden burde scriptet blive kørt alle dage kl. 02:00, men det sker bare ikke. Scriptet bruger mysqldump, gzip og rsync til at eksporte, komprimerer og sende data'erne...

Hvad kan der være galt og er der forskel på den crontab jeg laver som root og den som jeg laver som useren (ubuntu i dette tilfælde)??

Hvis jeg blot kalder scriptet med

Kode: Vælg alt

bash /home/ubuntu/scripts/mysql_backup.sh

virker det fint.
// MaBoNi- Helt ny Ubuntu mand, men ret godt tilfreds indtil videre....
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Crontab kører ikke script

Indlæg af lath »

Muligheder:
  • execute bits er ikke sat for /home/ubuntu/scripts/mysql_backup.sh
  • execute other bit er ikke sat
  • scriptet er afhængig af nogle variabler som er med dit brugernavn, men ikke når crontab kører den?

Kode: Vælg alt

ls -l /home/ubuntu/scripts/mysql_backup.sh

afslører rettigheder og rwx bits for brugeren, gruppen, og other.

Læs mere på https://help.ubuntu.com/community/FilePermissions om rettigheder på filer, mapper osv i filsystemet.
I terminalen ændres filrettigheder med chmod kommandoen, den er også godt beskrevet på den side, samt i detaljer på dens manual side: http://manpages.ubuntu.com/manpages/lucid/en/man1/chmod.1.html, som også kan tilgås fra en terminal ved at køre:

Kode: Vælg alt

man chmod

q-tasten afslutter man læseren, du kan også læse den med pinfo, som dog skal installeres først.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Crontab kører ikke script

Indlæg af lath »

Iøvrigt bør du placere din script i mapper beregnet til programmer.

Du får en fin liste i terminalen ved at køre:

Kode: Vælg alt

echo -e $PATH

mapperne er adskilt af :-tegnet


Jeg foreslår at du ligger dit script i:

Kode: Vælg alt

/usr/local/sbin



Ekstra mulighed
i starten af scriptet har du ikke skrevet:

Kode: Vælg alt

#!/bin/bash

der fortæller kernen (i dette tilfælde) at du har et bash script, og derfor starter bash med dit script som argument.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
MaBoNi
Indlæg: 30
Tilmeldt: 24. maj 2011, 22:54

Re: Crontab kører ikke script

Indlæg af MaBoNi »

Hmmm umiddelbart har filen alle rettigheder (den fik en chmod 777 da jeg tænkte det måske kunne være det):

Kode: Vælg alt

-rwxrwxrwx 1 ubuntu ubuntu 309 2011-06-20 22:21 /home/ubuntu/scripts/mysql_backup.sh

Selve scriptet der køres er:

Kode: Vælg alt

dato=`date -I`

mysqldump -uroot -pMitMySQLRootPassword --all-databases > /home/ubuntu/backups/mysql/mysql_backup_$dato.sql;
gzip /home/ubuntu/backups/mysql/mysql_backup_$dato.sql

rsync -av --recursive --times /home/ubuntu/backups/mysql/ "username@xxx.xxx.xxx.xxx::Backup_System/BackupFolders/UbuntuServer

Er der noget der ser forkert ud??

Er det i selve .sh filen jeg skal starte med #!/bin/bash eller i min crontab??
// MaBoNi- Helt ny Ubuntu mand, men ret godt tilfreds indtil videre....
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: Crontab kører ikke script

Indlæg af AJenbo »

MaBoNi skrev:

Kode: Vælg alt

0 2 * * * /home/ubuntu/scripts/mysql_backup.sh


I min verden burde scriptet blive kørt alle dage kl. 02:00, men det sker bare ikke.

Er der ingen brugere i din verden? Der er selvfølgelig mange problemer løst ved ikke at have det ;)

Kode: Vælg alt

0 2 * * * ubuntu /home/ubuntu/scripts/mysql_backup.sh
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Crontab kører ikke script

Indlæg af lath »

MaBoNi skrev:Hmmm umiddelbart har filen alle rettigheder (den fik en chmod 777 da jeg tænkte det måske kunne være det):

Kode: Vælg alt

-rwxrwxrwx 1 ubuntu ubuntu 309 2011-06-20 22:21 /home/ubuntu/scripts/mysql_backup.sh

Selve scriptet der køres er:

Kode: Vælg alt

dato=`date -I`

mysqldump -uroot -pMitMySQLRootPassword --all-databases > /home/ubuntu/backups/mysql/mysql_backup_$dato.sql;
gzip /home/ubuntu/backups/mysql/mysql_backup_$dato.sql

rsync -av --recursive --times /home/ubuntu/backups/mysql/ "username@xxx.xxx.xxx.xxx::Backup_System/BackupFolders/UbuntuServer

Er der noget der ser forkert ud??

Er det i selve .sh filen jeg skal starte med #!/bin/bash eller i min crontab??

det er i selve scriptet at det skal stå på første linie ved første tegn, så dit script bliver:

Kode: Vælg alt

#!/bin/sh
exec /bin/bash $0 ${1+"$@"}

dato=`date -I`

mysqldump -uroot -pMitMySQLRootPassword --all-databases > /home/ubuntu/backups/mysql/mysql_backup_$dato.sql;
gzip /home/ubuntu/backups/mysql/mysql_backup_$dato.sql

rsync -av --recursive --times /home/ubuntu/backups/mysql/ "username@xxx.xxx.xxx.xxx::Backup_System/BackupFolders


Jeg skrev lige #!/bin/bash om.

De 2 øverste linier er den mest skudsikre metode til at starte et script med en eller anden fortolker. Den virker f.eks. også på BSD, Mac OS X, og UNIX.

Det kryptiske $0 "${1+"$@"} er en ekspantion af argumenter, så nu kan du overføre argumenter til dit script.
Du kan også udelade det, men nu ved du hvordan det gøres.

Lidt sikkerhed, eller hvad jeg ville gøre
Jeg ville sætte filens rettigheder til 755. Alle og enhver skal ikke have lov til at rette i filen. Kun ejeren af filen.

Filen bør ejes af root:

Kode: Vælg alt

sudo chown root /home/ubuntu/scripts/mysql_backup.sh


Gruppen bør være root:

Kode: Vælg alt

sudo chgrp root /home/ubuntu/scripts/mysql_backup.sh


Den kan læses og udføres af alle, men den kan ikke slettes og rettes af alle, og den skal læses,rettes i, og køres af ejeren.
Det er 755:

Kode: Vælg alt

sudo chmod 755 /home/ubuntu/scripts/mysql_backup.sh


/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
MaBoNi
Indlæg: 30
Tilmeldt: 24. maj 2011, 22:54

Re: Crontab kører ikke script

Indlæg af MaBoNi »

Så er der lavet en:

Kode: Vælg alt

sudo chown root.root /home/ubuntu/scripts/mysql_backup.sh

og

Kode: Vælg alt

sudo chmod 755 /home/ubuntu/scripts/mysql_backup.sh


Men hvad er forskellen på den crontab som laves under root og så den der laves under ubuntu brugeren... Skal jeg skrive noget for at starte service??

Hvis jeg taster #!/bin/sh exec /bin/bash $0 ${1+"$@"} ind i .sh filen vil den slet ikke kører scriptet??

Sidst men ikke mindst så virker skidtet stadig ikke... Kan jeg finde en log fil over hvad cron forsøger sig med??
// MaBoNi- Helt ny Ubuntu mand, men ret godt tilfreds indtil videre....
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: Crontab kører ikke script

Indlæg af AJenbo »

Fik du tilføjet brugeren til crontabs som i mit eksempel?
Hvis ikke scriptet skal have adgang til hele systemet bør du sætte ejeren til ubuntu og brugeren i con jobbet til det samme, ellers skal de begge være root.
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Crontab kører ikke script

Indlæg af lath »

MaBoNi skrev:Hvis jeg taster #!/bin/sh exec /bin/bash $0 ${1+"$@"} ind i .sh filen vil den slet ikke kører scriptet??

Sidst men ikke mindst så virker skidtet stadig ikke... Kan jeg finde en log fil over hvad cron forsøger sig med??

Ja, det er rigtig nok - jeg har desværre lavet en fejl.
Det jeg skrev før gælder kun for en bestemt fortolker.

Dit script skal starte med

Kode: Vælg alt

#!/bin/bash


Test kode som skriver Helo World! Scriptet oprettes og skrives af koden herunder:

Kode: Vælg alt

echo '#!/bin/bash' > ./test.sh;echo ' echo  "Hello World!"' >> ./test.sh;chmod 755 ./test.sh


Bagefter kører du scriptet med:

Kode: Vælg alt

./test.sh

./ er nødvendig da scriptfilen ligger uden for mapperne i $PATH

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
MaBoNi
Indlæg: 30
Tilmeldt: 24. maj 2011, 22:54

Re: Crontab kører ikke script

Indlæg af MaBoNi »

AJenbo skrev:Fik du tilføjet brugeren til crontabs som i mit eksempel?
Hvis ikke scriptet skal have adgang til hele systemet bør du sætte ejeren til ubuntu og brugeren i con jobbet til det samme, ellers skal de begge være root.

Ja linien hedder nu (root crontab -e):

Kode: Vælg alt

55 9 * * * root /home/ubuntu/scripts/mysql_backup.sh

Selvom der faktisk i crontab filen står følgende eksempel:

Kode: Vælg alt

# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

Den er jo uden en bruger??

Men backup'en blev ikke kørt her kl. 09:55... Kunne man se nogle logfiler et sted??
// MaBoNi- Helt ny Ubuntu mand, men ret godt tilfreds indtil videre....
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: Crontab kører ikke script

Indlæg af AJenbo »

Jeg mener du kan se det i syslog.
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Crontab kører ikke script

Indlæg af lath »

MaBoNi skrev:Men backup'en blev ikke kørt her kl. 09:55... Kunne man se nogle logfiler et sted??


Du skal lige isolere fejlen.

Hvis backup scriptet ikke kører, når du skriver følgende i terminalen:

Kode: Vælg alt

/home/ubuntu/scripts/mysql_backup.sh

så ligger fejlen i scriptet, eller at scriptet ikke er 755 i rettigheder (eller mere).

Virker scriptet så starter cron ikke ikke scriptet.
Start med at sikre dig at cron rent faktisk kører, og tjek så crontab.

Det er ikke sikkert at cron læser crontab, når du har ændret i den, men skal sende et signal til programmet for at genindlæse crontab filen.
Signaler sendes via kill kommandoen (ja, - den kan andet end bare dræbe en proces.)

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: Crontab kører ikke script

Indlæg af AJenbo »

Han skal vel køre

Kode: Vælg alt

sudo su

før kommandoen og

Kode: Vælg alt

exit

efter hvis han har sat cron jobbet til at køre som root og scriptet til at være ejet at root.
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Crontab kører ikke script

Indlæg af lath »

AJenbo skrev:Han skal vel køre

Kode: Vælg alt

sudo su

før kommandoen og

Kode: Vælg alt

exit

efter hvis han har sat cron jobbet til at køre som root og scriptet til at være ejet at root.


sudo er overflødigt, og su er ikke nødvendigt for at køre et script som user root, når et cron job selv er root.
Årsagen er at en child-process ejer egenskaberne fra forældre processen, medmindre man gør noget andet.

Noget andet kan være at droppe superbruger privilegier via su:

Kode: Vælg alt

su an_unpriviliged_user -l -c '/a/non/interactive/job'

som aldrig spørger om kodeord hvis processen er root.



Man kan ikke prompte for et kodeord, eller lave noget som helst interaktivt, så det er umuligt at gå fra upriviligeret bruger til root priviliger.
scripts der der er setuid root bliver ignoreret af kernen - det nægter kernen simpelthen at gøre.
Kun kompilerede programmer kan være setuid root. su og sudo programmerne er setuid root af indlysende årsager.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
AJenbo
Admin
Indlæg: 20878
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: Crontab kører ikke script

Indlæg af AJenbo »

Jeg tænker på når han vil teste scriptet, for hvis han har sat cron til at køre det som root vild det ikke have samme bruger mappe etc som hvis han tester det fra din egen konto, og så er det ikke sikkert scriptet vil fungere på samme måde som da han testede det fra hans egen bruger.