Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: 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 :
#!/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 restartJde 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
/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.
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?
-
Co to sudo?
-
Můžeš to trochu rozvést? Nerozumím... ;)
-
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.
-
...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:
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... :(
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 :
sudo /home/pi/backup.shkdyž tam "sudo" nechám, tak to jde spustit :
/home/pi/backup.shNicméně Cron pořád nic... >:(
-
Pokud je třeba skript spouštět pod rootem, tak bude dobré ten skript spouštět z cronu roota, tedy:
sudo crontab -ejinak se asi těžko domůže práv.
-
Tak jem to nastavil v root cronu a zase nic, neproběhlo to, pouze se připojila složka NASu...
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:~$
-
doplňte v tom skriptu cesty
kde je binárka mount zjistíte takto:
which mountkde je binárka service zjistíte takto:
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)
-
Len podotknem, ze so sudom si nemusis lamat hlavu, raspbmc ma defaultne sudo na all NOPASSWD, cize heslo zadavat nemusi a roota dostane.
-
doplňte v tom skriptu cesty
kde je binárka mount zjistíte takto:
which mountkde je binárka service zjistíte takto:
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 :
pi@raspbmc:~$ which mount
/bin/mount
pi@raspbmc:~$ which service
/usr/sbin/serviceMůžete mi poradit jak by ten script měl teda vypadat? Když jsem udělal něco takového tak to nefungovalo :
#!/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 restartNebo jak přesně v crontabu doplnit proměnnou PATH tak, aby to všechno fungovalo?
-
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:
echo $PATHa výsledek použij v Cronu:
export PATH='to co ti vypsalo to echo'; /home/pi/backup.sh
Edit: sloučil jsem dva příspěvky
-
Script jsem teda upravil takto:
#!/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 restartecho $PATHTak tento příkaz mi vypsal toto..
/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:
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
-
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.