Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: Mayki 17 Září 2014, 20:08:25

Název: Cron nespouští vytvořený script [Vyřešeno]
Přispěvatel: Mayki 17 Září 2014, 20:08:25
Ahoj všichni,
předem předesílám že jsem úplný začátečník. Můj problém se týká Raspberry Pi na kterém běží systém RaspBmc. Vím že to není čistý Linux (asi), ale snad mi tady někdo poradí. Na této stránce :
http://www.linux-tips-and-tricks.de/de/raspberry/23-pi-erstellt-automatisch-backups-von-sich-selbst-pi-creates-automatic-backups-of-itself/#English (http://www.linux-tips-and-tricks.de/de/raspberry/23-pi-erstellt-automatisch-backups-von-sich-selbst-pi-creates-automatic-backups-of-itself/#English)
jsem si stáhl script pro zálohování SD karty v Raspberry, script samotný mi korektně nefungoval a tak jsem si vytvořil ještě malý script backup.sh, pomocí kterého to zálohování spouštím :
Kód: [Vybrat]
#!/bin/bash
 
sudo mount 192.168.0.101:/volume1/Backup /backup -o nolock

sudo service php5-fpm stop

sudo raspiBackup.sh -p /backup -t tar -k 7 -o "service xbmc stop" -a "service xbmc start"

sudo service php5-fpm restart
Jde mi o to, že napřed musím připojit složku v NASu, potom zastavit jednu službu která mi brání v zálohování a teprve potom se korektně provede záloha z původního scriptu raspiBackup.sh
Tohle všechno funguje bez problému pokud to spustím přes PUTTY příkazem
Kód: [Vybrat]
/home/pi/backup.sh Pokud tuto úlohu nastavím v Cronu pro automatické zálohování tak toto nikdy korektně neproběhne, vypozoroval jsem, že se pouze připojí NAS, ale už se nezastaví služba a ani neprovede záloha. Cron mám v nastastavení zapnutý, už jím spouštím pravidelně jeden jiný script.
Kód: [Vybrat]
pi@raspbmc:~$ crontab -l
#
# m h  dom mon dow   command
45 19 * * * /home/pi/toggleHyperion.sh
10 19 * * 1,3,5 /home/pi/backup.sh
pi@raspbmc:~$
Nerozumím tomu, proč přes PUTTY všechno proběhne, ale Cron mi to už nespustí, poradíte?
Název: Re:Cron nespouští vytvořený script
Přispěvatel: Cuore 17 Září 2014, 20:14:14
Co to sudo?
Název: Re:Cron nespouští vytvořený script
Přispěvatel: Mayki 17 Září 2014, 20:15:33
Můžeš to trochu rozvést? Nerozumím... ;)
Název: Re:Cron nespouští vytvořený script
Přispěvatel: Cuore 17 Září 2014, 20:41:14
No pokud je to obdoba ubuntu, tak pomocí sudo si propujčíš práva roota. Takže pokud to zadáš v terminálu chce to po tobě heslo a pak script proběhne. Pomocí cronu předpokládám, že script se bude spouštět pod rootem, takže to sudo bych smazal.
Název: Re:Cron nespouští vytvořený script
Přispěvatel: Mayki 17 Září 2014, 20:48:37
...Takže pokud to zadáš v terminálu chce to po tobě heslo a pak script proběhne. Pomocí cronu předpokládám, že script se bude spouštět pod rootem, takže to sudo bych smazal.
No, do terminálu se nemusím přihlásit jako root, stačí jako uživatel, zadám příkaz:
Kód: [Vybrat]
sudo /home/pi/backup.shPředtím jsem to špatně napsal, a script se spustí, žádné heslo to po mě nechce. Nicméně jsem pomazal všechny sudo ve scriptu backup.sh a stejně se to z Cronu nespustilo. Pro kontrolu jsem to teď spustil z terminálu a normálně to jede... :(
Kód: [Vybrat]
pi@raspbmc:~$ sudo /home/pi/backup.sh
--- raspbmc: raspiBackup.sh 0.5.4.1 started at Wed Sep 17 20:44:12 CEST 2014 ...
/dev/mmcblk0p1            4096      147455       71680    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          151552     3842047     1845248   83  Linux
--- Stopping services ...
xbmc stop/waiting
--- Starting services...
xbmc start/running, process 1912
--- raspbmc: raspiBackup.sh 0.5.4.1 finished at Wed Sep 17 20:49:23 CEST 2014 ...
--- Backup finished successfully
[ ok ] Restarting PHP5 FastCGI Process Manager: php5-fpm.
pi@raspbmc:~$
Edit: tak ještě jinak, když jsem smazal všechna "sudo", musím to spouštět :
Kód: [Vybrat]
sudo /home/pi/backup.shkdyž tam "sudo" nechám, tak to jde spustit :
Kód: [Vybrat]
/home/pi/backup.shNicméně Cron pořád nic... >:(
Název: Re:Cron nespouští vytvořený script
Přispěvatel: GdH 17 Září 2014, 20:54:21
Pokud je třeba skript spouštět pod rootem, tak bude dobré ten skript spouštět z cronu roota, tedy:
Kód: [Vybrat]
sudo crontab -ejinak se asi těžko domůže práv.
Název: Re:Cron nespouští vytvořený script
Přispěvatel: Mayki 17 Září 2014, 21:16:39
Tak jem to nastavil v root cronu a zase nic, neproběhlo to, pouze se připojila složka NASu...
Kód: [Vybrat]
pi@raspbmc:~$ sudo crontab -l
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
10 21 * * * /home/pi/backup.sh
pi@raspbmc:~$
Název: Re:Cron nespouští vytvořený script
Přispěvatel: jmp 18 Září 2014, 06:50:26
doplňte v tom skriptu cesty
kde je binárka mount zjistíte takto:
Kód: [Vybrat]
which mountkde je binárka service zjistíte takto:
Kód: [Vybrat]
which service...

EDIT: nebo můžete v crontabu doplnit proměnnou PATH tak, aby to všechno fungovalo (v defautu není tato proměnná v crontabu nastavena)
Název: Re:Cron nespouští vytvořený script
Přispěvatel: menganito 18 Září 2014, 08:38:06
Len podotknem, ze so sudom si nemusis lamat hlavu, raspbmc ma defaultne sudo na all NOPASSWD, cize heslo zadavat nemusi a roota dostane.
Název: Re:Cron nespouští vytvořený script
Přispěvatel: Mayki 19 Září 2014, 18:30:05
doplňte v tom skriptu cesty
kde je binárka mount zjistíte takto:
Kód: [Vybrat]
which mountkde je binárka service zjistíte takto:
Kód: [Vybrat]
which service...

EDIT: nebo můžete v crontabu doplnit proměnnou PATH tak, aby to všechno fungovalo (v defautu není tato proměnná v crontabu nastavena)
Vypsalo mi to tohle :
Kód: [Vybrat]
pi@raspbmc:~$ which mount
/bin/mount
pi@raspbmc:~$ which service
/usr/sbin/service
Můžete mi poradit jak by ten script měl teda vypadat? Když jsem udělal něco takového tak to nefungovalo :
Kód: [Vybrat]
#!/bin/bash
 
sudo /bin/mount 192.168.0.101:/volume1/Backup /backup -o nolock

sudo service php5-fpm stop

sudo usr/local/bin/raspiBackup.sh -p /backup -t tar -k 7 -o "service xbmc stop" -a "service xbmc start"

sudo /usr/sbin/service php5-fpm restart
Nebo jak přesně v crontabu doplnit proměnnou PATH tak, aby to všechno fungovalo?
Název: Re:Cron nespouští vytvořený script
Přispěvatel: GdH 19 Září 2014, 18:53:42
Začal bych tím, že si opravíš a doplníš ty cesty k příkazům. U prvního service ti chybí úplně a u toho backup skriptu nemáš na začátku lomítko.

Případně si ještě vyexportovat tu proměnnou PATH. V normálním terminálu spusť příkaz:
Kód: [Vybrat]
echo $PATHa výsledek použij v Cronu:
Kód: [Vybrat]
export PATH='to co ti vypsalo to echo'; /home/pi/backup.sh
Edit: sloučil jsem dva příspěvky
Název: Re:Cron nespouští vytvořený script
Přispěvatel: Mayki 19 Září 2014, 19:25:04
Script jsem teda upravil takto:
Kód: [Vybrat]
#!/bin/bash
 
sudo /bin/mount 192.168.0.101:/volume1/Backup /backup -o nolock

sudo /usr/sbin/service php5-fpm stop

sudo /usr/local/bin/raspiBackup.sh -p /backup -t tar -k 7 -o "service xbmc stop" -a "service xbmc start"

sudo /usr/sbin/service php5-fpm restart
Kód: [Vybrat]
echo $PATHTak tento příkaz mi vypsal toto..
Kód: [Vybrat]
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/opt/vc/bin:/home/pi/.xbmc-current/xbmc-bin/binZápis v Cronu má teda vypadat takto:
Kód: [Vybrat]
10 19 * * 1,3,5 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/opt/vc/bin:/home/pi/.xbmc-current/xbmc-bin/bin; /home/pi/backup.sh
Tak teď poprvé zálohování z Cronu proběhlo celé a v pořádku... ;)
Chtěl bych poděkovat za ochotu a trpělivost, díky... :D ;D :D
Název: Re:Cron nespouští vytvořený script [Vyřešeno]
Přispěvatel: GdH 19 Září 2014, 19:37:11
Tak fajn. Jak tam máš obsah $PATH z klasického uživatelského terminálu, tak jsou absolutní cesty k příkazům zbytečné, ale každopádně ničemu neškodí, teoreticky spíš naopak.