Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: mephcz 27 Března 2013, 21:25:45

Název: scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: mephcz 27 Března 2013, 21:25:45
Zdravím všechny udělal jsem si simple script který kontroluje instalované aplikace a v případě že je nainstalová zálohuje jejich CFG. Případně app s více soubory např apache2 kopíruje celou složku.
Když spustím script ručně tak je vše ok ale když ho umístím do cronu tak se hlavně zálohy kde kopíruji složky (SQUID, APACHE...) neprovedou. V cronu jsem zkoušel dát před script /bin/bash bez uspechu.

Pro přehled přikládám zmíněný script
Díky moc za případnou pomoc... v shellu jsem začátečník samouk :-)

#!/bin/bash

#Definice adresaru pro zalohy
HOST=${HOSTNAME}
BACKUP_DIR="/home/daniel/CFG_BACKUP";
BACKUP_DAY="`date +%d_%m_%y`";
ARCHIVE="ARCHIVE";
MNT="/mnt/SFTP";


#Aplikace pro test
SQUID="squid";
SQUID3="squid3";
OPENVPN="openvpn";
SARG="sarg";
APACHE="apache2";
DHCP="dhcpd";

#Adresaře s instalacnimi soubory

DIR_SQUID="/etc/squid/squid.conf";
DIR_SQUID3="/etc/squid3/squid.conf";
DIR_OPENVPN="/etc/openvpn/";
DIR_SARG="/etc/sarg";
DIR_APACHE2="/etc/apache2";
DIR_DHCP="/etc/dhcp";


#Definice systémových souborů
FILE_RC="/etc/rc.local"
FILE_NETWORK="/etc/network/interfaces"
CONFIGY="/home/daniel/*.sh"


#Kontrola a vztvoreni adresarove struktury pro zalohy


if [ ! -d "$BACKUP_DIR/$BACKUP_DAY" ];
then
        echo "$BACKUP_DIR/$BACKUP_DAY neexistuje vytvářím"
        mkdir -p "$BACKUP_DIR/$BACKUP_DAY"
fi




#kontrola zda jsou app nainstalovane, v pripade ze ano.. backup CFG

if type $SQUID >/dev/null 2>&1 ;
then
         cp -p $DIR_SQUID $BACKUP_DIR/$BACKUP_DAY/
fi

if type $SQUID3 >/dev/null 2>&1 ;
then
         cp -p $DIR_SQUID3 $BACKUP_DIR/$BACKUP_DAY/
fi

if type $OPENVPN >/dev/null 2>&1 ;
then
         cp -p -R $DIR_OPENVPN $BACKUP_DIR/$BACKUP_DAY/
fi

if type $SARG >/dev/null 2>&1 ;
then
         cp -p -R $DIR_SARG $BACKUP_DIR/$BACKUP_DAY/
fi

if type $APACHE >/dev/null 2>&1 ;
then
         cp -p -R $DIR_APACHE2 $BACKUP_DIR/$BACKUP_DAY/
fi

if type $DHCP >/dev/null 2>&1 ;
then
         cp -R $DIR_DHCP $BACKUP_DIR/$BACKUP_DAY/
fi

#Zaloha systemovych souboru
cp -p $FILE_RC $BACKUP_DIR/$BACKUP_DAY/
cp -p $FILE_NETWORK $BACKUP_DIR/$BACKUP_DAY/
cp $CONFIGY $BACKUP_DIR/$BACKUP_DAY/


if [ ! -d "$BACKUP_DIR/$ARCHIVE" ];
then
        echo "$BACKUP_DIR/$ARCHIVE neexistuje vytvářím"
        mkdir -p "$BACKUP_DIR/$ARCHIVE"
fi



chown daniel:root -R $BACKUP_DIR/$BACKUP_DAY

#Smazani zaloch v archivu starsich nez 30 dni
find $BACKUP_DIR -iname "*.tgz" -mtime +30 -type f -exec rm -rf {} \;

#Presun predchozi zalohy do archivu
mv $BACKUP_DIR/*.tgz $BACKUP_DIR/$ARCHIVE

#Zabaleni a smazani docasne slozky
tar cpzf $BACKUP_DIR/"$HOST"_"$BACKUP_DAY".tgz $BACKUP_DIR/$BACKUP_DAY
#rm -r $BACKUP_DIR/$BACKUP_DAY
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: menganito 28 Března 2013, 10:26:27
Ako vyzera crontab entry? Skusil si si cely vystup presmerovat do dakeho logu a tam hladat chybove hlasky?
Kód: [Vybrat]
/home/daniel/skript.sh &> /home/daniel/backup.log
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: mephcz 28 Března 2013, 10:46:16
Ahoj,

Výstup do logu jsem zkusil jak v cronu tak při ručním spuštění. U obou případu nebyla v logu žádná chyba jen oznámení z echa ve skriptu. Pri spusteni z cronu mi v zaloze chybi složky apache2 squidu a dhcp zbytek tam byl. Pri rucnim spusteni skriptu je vse ok..
nechapu kde muze byt zakopany pes
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: menganito 28 Března 2013, 11:14:51
Kód: [Vybrat]
cp -p -R $DIR_APACHE2/* $BACKUP_DIR/$BACKUP_DAY/$DIR_APACHE2/* by neslo?
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: mephcz 28 Března 2013, 11:59:31
bohužel bez úspěchu výsledek je stejný, ale mám pocot že na exekuci toho příkazu na kopírování ani nedojde spíš se mi zdá že dotaz na instalaci apache vrati hodnotu že není instalován což jsem si právě potvrdil dosazenim echa na then a else stavy:

if type $APACHE >/dev/null 2>&1 ;
then
#        cp -p -R $DIR_APACHE2 $BACKUP_DIR/$BACKUP_DAY/
        cp -p -R $DIR_APACHE2/* $BACKUP_DIR/$BACKUP_DAY/$DIR_APACHE2/*
        echo "Provadim backup apache2"
else
        echo "Apache2 neni nainstalovan"
fi


výstup z logu je:
/home/daniel/CFG_BACKUP/28_03_13 neexistuje vytvářím
Apache2 neni nainstalovan
Backup vytvoren

Takže příčina je při spuštění z cronu z nějakého duvodu dotaz vrací že apache v systemu není. Nevíte případně o jiném zpusobu dotazu na instalované balíčky? Který by neměl problém z cronem?
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: jmp 28 Března 2013, 12:47:57
Citace
$ type apache2
bash: type: apache2: nenalezeno
$ type httpd
httpd je /usr/sbin/httpd

EDIT: nebude lepší kontrolovat, jestli existuje složka s konfigurací a tu případně zálohovat, než sledovat existeni binárky služby?
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: mephcz 28 Března 2013, 15:55:25
Máte pravdu, než se s tím trápi tak jsem to přenastavil na kontrolu složek. a vše se chová korektně.

Díky :-)
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: ntz_reloaded 28 Března 2013, 16:01:01
dve poznamky:

1) nepouzivej prosim v shellovych skriptech UPPERCASE pro sve promenne ;) .. uppercase by mel byt vyhrazen pro systemove promenne
2) na debug skriptu prosim pouzivej:

Kód: [Vybrat]
_logfile=/var/tmp/`basename $0`.log.`date +%M%H%d%m%y`;
set -x;
exec 2>$_logfile;
Název: Re:scipt puštěný z cronu nekopíruje určené složky
Přispěvatel: mephcz 28 Března 2013, 20:08:16
beru v potaz, díky  ::)