Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: On 25 Února 2011, 09:06:18
-
Opravdu jsem bojoval a to dost dlouho, ale už nevím..
Tady je skript:
#!/bin/bash
#################################### POPIS ###########################################
# #
# Tento soubor nechat spouštět cronem dle důležitosti dat #
# Dojde k zálohám přednastavených cest #
# Každý měsíc pak dojde k přesunu záloh do složky archive #
# #
######################################################################################
########################### Nastavení proměnných #################################################
root=`cat /etc/passwd | grep 1000`
declare -a var;
var=(`echo "$root" | tr ':' ' '`);
root_user=${var[0]};
backsys="/home/$root_user/.backsys";
BACKUP=`cat $backsys/destination | grep DATA | awk '{print $2}'`
BACKUP_DATA="$BACKUP/DATA"
log="$backsys/LOGS/data.log"
LOGS="$backsys/LOGS";
data="$backsys/DATA/option_data";
file=`date +%y%m%d_%H%M%S`
check_date=`date +%y%m`
backup_date=`date +%y%m%d --date="1 month ago"`
row=`cat $data | wc -l`
list=`cat $data | grep 1000`
declare -a var;
var=(`echo "$list" | tr ':' ' '`);
user=${var[0]};
######################################## FUNKCE ##################################################
zaloha() {
if [ "$BACKUP" == "" ]; then
echo
echo -e "\033[31m Nebyla zadána cesta pro uložení DAT. Najeďte do nastavení společných cest a definujte cílovou cestu zálohy\033[0m";
exit
elif [ ! -s $data ]; then
echo
echo -e "\033[31m Není nastavena cesta k zálohování. Najeďte do nastavení DAT a nastavte cesty\033[0m";
exit
else
cd $BACKUP_DATA
for ((i=1; $i<=$row; i=$i+1)); do
backup_way=`head -n $i $data | tail -1`
list=(`echo "$backup_way" | tr '/' ' '`);
pole=(`echo ${list
fldr_num=`echo ${list
fldr_num=`expr $fldr_num - 1`;
folder_name=${pole[$fldr_num]};
file2=$folder_name"_"$file.tgz;
tar cpzf $file2 $backup_way 2> $LOGS/$folder_name.log
status=`echo $?`;
if [ $status -eq 0 ]; then
echo "`date` - ZÁLOHA DAT NA CESTĚ \"$backup_way\" ÚSPĚŠNĚ DOKONČENA ($file2)" >> $log
else
echo "`date` - !!! ZÁLOHA DAT NA CESTĚ \"$backup_way\" DOKONČENA SE STATUSEM: $status !!!" >> $log
fi;
sleep 1s;
done
fi
}
##################################################################################################
if [ ! -d $BACKUP_DATA ]; then mkdir -p $BACKUP_DATA/archive; echo "empty" > /tmp/DATA.bs; fi;
if [ ! -d $backsys/LOGS ]; then mkdir -p $backsys/LOGS; fi;
cd $BACKUP_DATA
if [ ! -f /tmp/DATA.bs ]; then
ls | grep "$check_date" > /dev/null;
stat=`echo $?`;
if [ "$stat" -eq "1" ]; then touch /tmp/DATA.bs; fi;
fi;
tmp=`cat /tmp/DATA.bs 2> /tmp/err`;
if [ "$tmp" != "empty" -a -f /tmp/DATA.bs ]; then
mv $BACKUP_DATA/*.tgz $BACKUP_DATA/archive
fi;
zaloha
if [ -f /tmp/DATA.bs ]; then rm /tmp/*.bs 2> /dev/null; fi;
###################################################################################################
exit
Výpis z cronu:
20 23 * * * /home/user/.backsys/DATA/backup_data.sh > /tmp/err_data.log
Když tuto cestu k souboru jen zkopíruju a vložím do shellu, tak se vše provede korektně.. Soubor /tmp/err_data.log se také vytvoří v přesně daný čas:
-rw-r--r-- 1 root root 0 2011-02-24 23:20 err_data.log
ale skript se prostě neprovede ...hledal jsem tady podobné problémy, ale tam se to vyřešilo např tím, že se vyhodil z TARu parametr "v", který tam já nemám..Spouštím to pod rootem..zkoušel jsem udělat soubor "start_backup_data.sh" a do něj jen cestu k souboru backup_data.sh, ale taky nepomohlo...prostě záloha se neprovede, ale přitom se zdá, že se v daný čas něco spustilo (vytvořilo ten soubor v /tmp)..už nevím co mu může vadit :(
EDIT: A zajímavá je ještě jedna věc...když ráno vstanu a podívám se, že se zálohy neprovedly, díval jsem se někdy v 7:20 ráno a dal jsem do cronu čas spuštění 7:22, počkal 2 minuty a záloha se provedla ...skript se spustil a vše proběhlo ok ...prostě nechápu, proč když to spustím za 2 minuty, tak se provede a když to naplánuju na někdy v noci, tak se neprovede ...nepomohl ani přesun skriptu do /etc/cron.daily
-
pridej tam i vypis chyb (stderr)
20 23 * * * /home/user/.backsys/DATA/backup_data.sh > /tmp/err_data.log 2>&1
mrkni se i do logu (syslog), co to v tu dobu (23:20) pise
-
stderr jsem tam doplnil, tak uvidíme zítra ...
Jinak výpisy z logu:
(zálohy mi to dělá dvě, čili jedná se o dva soubory, ale se stejným problémem..posílám výpisy ze syslogu z obou dvou)
23:10
Feb 24 23:10:01 dzo CRON[18493]: (root) CMD (/home/ladik/.backsys/DB/start_db.sh > /tmp/err_db.log)
Feb 24 23:10:01 dzo postfix/pickup[18484]: 2DF0910017A: uid=0 from=<root>
Feb 24 23:10:01 dzo postfix/cleanup[18497]: 2DF0910017A: message-id=<20110224221001.2DF0910017A@dzo>
Feb 24 23:10:01 dzo postfix/qmgr[2093]: 2DF0910017A: from=<root@dzo.cz>, size=546, nrcpt=1 (queue active)
Feb 24 23:10:01 dzo postfix/local[18499]: 2DF0910017A: to=<root@dzo.cz>, orig_to=<root>, relay=local, delay=0.15, delays=0.11/0.01/0/0.04, dsn=2.0.0, status=sent (delivered to mailbox)
Feb 24 23:10:01 dzo postfix/qmgr[2093]: 2DF0910017A: removed
23:20
Feb 24 23:20:01 dzo CRON[18505]: (root) CMD (/home/ladik/zaloha/skripty/permission.sh)
Feb 24 23:20:01 dzo CRON[18506]: (root) CMD (/home/ladik/.backsys/DATA/start_data.sh > /tmp/err_data.log)
Feb 24 23:20:01 dzo postfix/pickup[18484]: 3DE351001C7: uid=0 from=<root>
Feb 24 23:20:01 dzo postfix/cleanup[18513]: 3DE351001C7: message-id=<20110224222001.3DE351001C7@dzo>
Feb 24 23:20:01 dzo postfix/qmgr[2093]: 3DE351001C7: from=<root@dzo.cz>, size=556, nrcpt=1 (queue active)
Feb 24 23:20:01 dzo postfix/pickup[18484]: 4B260FFC84: uid=0 from=<root>
Feb 24 23:20:01 dzo postfix/cleanup[18513]: 4B260FFC84: message-id=<20110224222001.4B260FFC84@dzo>
Feb 24 23:20:01 dzo postfix/local[18515]: 3DE351001C7: to=<root@dzo.cz>, orig_to=<root>, relay=local, delay=0.15, delays=0.1/0.01/0/0.04, dsn=2.0.0, status=sent (delivered to mailbox)
Feb 24 23:20:01 dzo postfix/qmgr[2093]: 3DE351001C7: removed
Feb 24 23:20:01 dzo postfix/qmgr[2093]: 4B260FFC84: from=<root@dzo.cz>, size=536, nrcpt=1 (queue active)
Feb 24 23:20:01 dzo postfix/local[18515]: 4B260FFC84: to=<root@dzo.cz>, orig_to=<root>, relay=local, delay=0.21, delays=0.16/0/0/0.05, dsn=2.0.0, status=sent (delivered to mailbox)
Feb 24 23:20:01 dzo postfix/qmgr[2093]: 4B260FFC84: removed
...a teď je jdu prostudovat :) díky za navedení, to mě nenapadlo kurnik
EDIT:
Spustil jsem skript opět cronem, nastavil jsem opět, aby se spustil za 2 minuty ...opět se vše provedlo korektně..výpis z logu:
Feb 25 11:26:53 dzo kernel: [325114.851483] IPT INPUT packet died: IN=eth0 OUT= MAC=00:26:55:6e:67:b7:00:26:5a:32:05:09:08:00 SRC=83.240.93.197 DST=192.168.1.200 LEN=107 TOS=0x00 PREC=0x00 TTL=55 ID=3106 DF PROTO=TCP SPT=53826 DPT=27015 WINDOW=1002 RES=0x00 ACK PSH URGP=0
Feb 25 11:27:01 dzo CRON[20781]: (root) CMD (/home/ladik/.backsys/DB/start_db.sh > /tmp/err_db.log 2>&1)
Feb 25 11:27:12 dzo kernel: [325134.225452] IPT INPUT packet died: IN=eth0 OUT= MAC=00:26:55:6e:67:b7:00:26:5a:32:05:09:08:00 SRC=83.240.93.197 DST=192.168.1.200 LEN=148 TOS=0x00 PREC=0x00 TTL=55 ID=9261 DF PROTO=TCP SPT=54475 DPT=26098 WINDOW=1675 RES=0x00 ACK PSH URGP=0
Feb 25 11:27:33 dzo kernel: [325155.485749] IPT INPUT packet died: IN=eth0 OUT= MAC=00:26:55:6e:67:b7:00:24:1d:91:f1:f9:08:00 SRC=192.168.1.101 DST=192.168.1.200 LEN=937 TOS=0x00 PREC=0x00 TTL=128 ID=13222 DF PROTO=TCP SPT=49454 DPT=80 WINDOW=16377 RES=0x00 ACK PSH URGP=0
Poslal jsem sice asi víc řádků než bylo třeba (to jen pro jistotu), ten cronový je ale hádám jen tento:
Feb 25 11:27:01 dzo CRON[20781]: (root) CMD (/home/ladik/.backsys/DB/start_db.sh > /tmp/err_db.log 2>&1)
a vše bylo ok..proč to teda nedělá i v noční čas je mi zatím stále záhadou
-
Tak nový poznatek je ten, že jsem sice přidal stderr, ale hlavně jsem místo roota to nechal spouštět pod svým uživatelským jménem a záloha se opravdu provedla...ještě zkusím ten druhý skript...kdyby to fungovalo, tak je problém sice vyřešen, ale i tak nechápu, proč to nezafungovalo pod rootem..
Navíc jsem zkoušel ten skript upravit tak, aby tam bylo jen to nejpodstatnější co se týká záloh (čili proměnné, mysqldump a tar..)..a tento upravený skript se nespustil ani pod tím mým jménem..opět to v logu vypisovalo ty řádky o postfixu..což je teda taky divné
-
Už jsem tady s cronem něco řešil. Měl jsem -v přepínač už nevim u čeho a kecalo mi to na std. výstup a to se cronu nelíbilo, po přesměrování do nullu v pohodě. Zkusim to najít...
-
http://forum.ubuntu.cz/index.php/topic,44401.0.html
Je to tak, už jsem to řešil.
BTW: nečetl jsem celý tvůj script, jen předpokládám, že chyba by mohla být tady. Pokud je na první pohled jasné, že to není ono, tak mě nekamenujte ;D
-
No, tvůj příspěvek jsem právě našel, psal jsem to v tomhle threadu hned v mém prvním příspěvku :)
....hledal jsem tady podobné problémy, ale tam se to vyřešilo např tím, že se vyhodil z TARu parametr "v", který tam já nemám..Spouštím to pod rootem..zkoušel jsem udělat soubor "start_backup_data.sh" a do něj jen cestu k souboru backup_data.sh, ale taky nepomohlo...prostě záloha se neprovede, ale přitom se zdá, že se v daný čas něco spustilo (vytvořilo ten soubor v /tmp)...
mám tam "tar cpzf" ..u tebe to ale z cronu předpokládám nezafungovalo vůbec, u mě to zafunguje, když si to naplánuju v aktuální dobu, aby se to spustilo třeba za 2 minuty...to se z cronu normálně provede...proč se to ale kruci fix teda neprovede v noci...nebo...co mu v tom čase vadí..podle mě je tohle bug ...není přece možné, abych si nastavil, že se po dvou minutách má spustit - a on se opravdu spustí a korektně provede a v jiný čas zase ne resp se spustí (vytvoří to ten logovací soubor v /tmp), ale skript se neprovede...to musí být bug jak když vyšije :) Možná jsem asi zapomněl dodat, že se jedná o Ubuntu 10.04 LTS SERVER ..mohl bych to zkusit i na 10.10 DESKTOP mě tak napadá :)
-
Tak pokud to cron spouští s právy uživatele, nikoliv s právy roota, tak vše proběhne korektně ...divné, ale funguje..
-
Hm, opět se z nějakého důvodu přestaly úlohy z cronu spouštět :( Teda NE všechny ...třeba skript na úpravu oprávnění se spouští korektně ..posílá mi to také SMS-ky, takže postfix by měl být též v pořádku...viz log níže
Všechno fungovalo až do nějakého dne (předpokládám nějaké aktualizace), bylo to už někdy v dubnu, chtěl jsem to vyřešit sám, ale prostě ne a ne..
Aktuální stav je takový, že.....
ono to funguje ...pokud je aktuální čas 8:30 a já dám spuštění na 8:31, tak to funguje ...čili všechno by mělo být v pořádku... Jak je možné, že když nastavím čas na nějaký noční (nebo jakýkoliv, který je od aktuálního času v rozmezí několik hodin), tak to nejde ...nezkoušel jsem minutu po minutě, kdy už je to na něj moc :) Pokud tento čas 8:31 nechám nastavený do dalšího dne, tak se ale stejně nespustí..
Výpis z logu dnes, pokud jsem to pustil za minutu:
Jun 30 08:27:01 server CRON[11162]: (ladik) CMD (/home/ladik/cron1d)
(soubor cron1d obsahuje linky na soubory, které se mají spouštět denně) - tady vše funguje
Výpis logu ze včerejška v nastavený čas 21:10
Jun 29 21:10:01 server CRON[9575]: (ladik) CMD (/home/ladik/cron1d)
Jun 29 21:10:01 server postfix/pickup[9533]: 752EDFF977: uid=1000 from=<ladik>
Jun 29 21:10:01 server postfix/cleanup[9579]: 752EDFF977: message-id=<20110629191001.752EDFF977@server>
Jun 29 21:10:01 server postfix/qmgr[1342]: 752EDFF977: from=<ladik@server.cz>, size=506, nrcpt=1 (queue active)
Jun 29 21:10:01 server postfix/local[9582]: 752EDFF977: to=<ladik@server.cz>, orig_to=<ladik>, relay=local, delay=0.18, delays=0.12/0.01/0/0.05, dsn=2.0.0, status=sent (delivered to mailbox)
Jun 29 21:10:01 server postfix/qmgr[1342]: 752EDFF977: removed
proč proč proč proč proč, když to ve dřívějším čase funguje..?? Postfix musí být taky v pořádku, posílá mi to SMS i klasické e-maily pravidelně, kdy potřebuji..
-
Po nějaké době se to "SAMO" začalo zase spouštět a následující den opět "SAMO" přestalo spouštět ...opravdu nemá nikdo nějaké rozumné vysvětlení??
Správný Log z 12.7.2011 v čase 10:12
Jul 12 10:12:01 server CRON[15836]: (ladik) CMD (/home/ladik/cron.1d /tmp/err.cron 2>&1)
Chybový log z 13.7.2011 v čase 10:12
Jul 13 10:12:01 server CRON[18838]: (ladik) CMD (/home/ladik/cron.1d /tmp/err.cron 2>&1)
Jul 13 10:12:01 server postfix/pickup[18663]: E82B7F709A: uid=1000 from=<ladik>
Jul 13 10:12:01 server postfix/cleanup[18842]: E82B7F709A: message-id=<20110713081201.E82B7F709A@server.server.cz>
Jul 13 10:12:02 server postfix/qmgr[1701]: E82B7F709A: from=<ladik@server.cz>, size=548, nrcpt=1 (queue active)
Jul 13 10:12:02 server postfix/local[18845]: E82B7F709A: to=<ladik@server.cz>, orig_to=<ladik>, relay=local, delay=0.26, delays=0.18/0.01/0/0.08, dsn=2.0.0, status=sent (delivered to mailbox)
Jul 13 10:12:02 server postfix/qmgr[1701]: E82B7F709A: removed
Jeden den to prostě funguje, následující už ne ..bez jakýchkoliv mých změn..
-
Zkoušel jsem i měnit interpretr skriptu, tedy místo #!/bin/bash jsem zkusil #!/bin/sh, zkusil jsem skript spouštět /usr/bin/sh /cesta/ke/skriptu.sh, ale pořád nic ...opět stále platí, že když to nechám spustit cronem za pár minut, tak se provede. Později nebo na druhý den už ale ne..
pořád nikdo neví, co by to mohlo mít na svědomí nebo co ještě vyzkoušet? Ani NTZ? :)
Skripty v php se mi spouští, tak přemýšlím, že to asi udělám v php (ikdyž jiné shellové se spouští taky, jen ne tenhle), pač pravidelné zálohy prostě potřebuji
-
Tak vyřešil jsem to podobným způsobem jako předtím ...předtím jsem to vyřešil tak, že jsem skript nemohl spouštět jako root, ale jako user...teď, když mi to tak podivně ukládá jako user1, tak jsem vytvořil user2 a pod ním vše funguje :-) Jsem přesvědčen, že se jedná o bug ...ale opět to tedy považuji za vyřešené