Tag Archives: crontab

Auto-desactivat de crontab

Es tracta que a partir d’un dia concret, es comenti una linea d’un cron, i aquest ja no es torni a executar mes.

El contingut del crontab es com segueix:

[bi@server1 test_cron]$ crontab -l
#al minut 15 cada 6 hores
15 */6 * * * /home/bi/test_cron/list_files.sh ; /home/bi/test_cron/desactivacron.sh > /home/bi/test_cron/cron.log

He fet el següent bash que ho modifica:

——————— desactivacron.sh —————–

#!/bin/sh
#
# Copia i modifica el crontab
#

#Creem un arxiu temporal
tmpfile=$(mktemp)

today=$(date +%Y%m%d)
cond=$(date -d 2017-05-01 +”%Y%m%d”)

#echo “$today > $cond ?”

#Recuperem el crontab actual
crontab -l > $tmpfile

#Si avui es mes gran que la data $cond
if [ $today -gt $cond ]
then
#Si hem passat de la data, es comenta el cron i ja no s’executarà mes…
sed -i ‘s/^15/#15/’ $tmpfile
else
#Si encara no hem passat la data, es descomenta el cron (en cas que el tingues comentat)
sed -i ‘s/^#15/15/’ $tmpfile
fi

crontab $tmpfile

#El·liminem l’arxiu temporal
rm $tmpfile

———————

Si fem

[bi@server1 test_cron]$  ./desactivacron.sh

El cron queda comentat o no segons si s’ha arribat a la data estipulada.

Aquest sh a la vegada l’executo

 

Intercomunicació Linux – Oracle (II)

Cron que executa Bash i taula externa

Es tracta de programar un cron executi una instrucció en un bash (llista de arxius “ls”) que llegeix els noms dels arxius que hi ha en un directori i generi un arxiu amb aquest contingut.

Finalment, es pot legir l’arxiu amb utl_file o com en l’exemple creem una taula externa, que ens facilita l’accés.

Comencem per el bash:

[bi@servidor1 test_cron]$ cat list_files.sh

#!/bin/sh
#
# Generate a comma separated ls -l for the directory in which the external table’s
# location file resides
#
ls -l –time-style=long-iso /data/int/test | /usr/bin/awk ‘BEGIN {OFS = “,”;} {print $1, $2, $3, $4, $5, $6″ “$7, $8}’ > /data/int/test/ls_files.txt

Creem taula a oracle

DROP TABLE BI_INT.LS_DIR_EXT;

CREATE TABLE BI_INT.LS_DIR_EXT
(
permisos VARCHAR(15),
tipus VARCHAR(1),
usuari VARCHAR(15),
grup VARCHAR(15),
mida VARCHAR(8),
data VARCHAR(20),
nom VARCHAR(100)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY DIR_CIEN_INT
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE
SKIP 1
NOBADFILE
NOLOGFILE
FIELDS TERMINATED BY ‘,’
)

LOCATION (DIR_CIEN_INT:’ls_files.txt’)
)
REJECT LIMIT UNLIMITED
NOPARALLEL
NOMONITORING;

Ens connectem amb putty o  Terminal SSH Secure Shell Client

Per veure els crons:

[bi@servidor     test_cron]$ crontab –l
*/30 * * * * /home/bi/test_cron/list_files.sh > /home/bi/test_cron/cron.log
#Comentari: S’executa cada 30 minuts

—-

Així, finalment si fem:

select * from BI_INT.LS_DIR_EXT

veurem:

PERMISOS TIPUS USUARI GRUP MIDA DATA NOM
-rw-r–r– 1 bi prd 28493 2016-03-31 16:11 280796079_3350699_160101_160115_160125_121326.xml.tar.gz
-rw-r–r– 1 bi prd 54981 2016-03-31 16:15 410592062_8403368_160101_160115_160125_183950.xml.tar.gz
-rw-r–r– 1 bi prd 0 2017-04-18 06:15 ls_files.txt
-rw-r–r– 1 bi prd 23 2017-04-04 15:44 taula.txt

—–

Per editar el cron:

crontab -e

S’obra en “Vi”

(Esc)
i – Insertar davant cursor
a – afegir darrera cursor
:w – escriu
:x – escriu i surt

———-

Si es tenen els permisos adequats, es pot arribar a fer que la propia consulta de la taula externa executi al vol un .sh que regeneri l’arxiu o troni directament el resultat, evitant així la necessitat de fer el cron.