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
-
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
-
Ako vyzera crontab entry? Skusil si si cely vystup presmerovat do dakeho logu a tam hladat chybove hlasky?
/home/daniel/skript.sh &> /home/daniel/backup.log
-
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
-
cp -p -R $DIR_APACHE2/* $BACKUP_DIR/$BACKUP_DAY/$DIR_APACHE2/*
by neslo?
-
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?
-
$ 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?
-
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 :-)
-
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:
_logfile=/var/tmp/`basename $0`.log.`date +%M%H%d%m%y`;
set -x;
exec 2>$_logfile;
-
beru v potaz, díky ::)