1 abr. 2009

bash + crontab + mt

[boceto no comprobado]Os dejo con este boceto porqué sé que hay algunos de vosotros que estáis siguiendo de cerca la evolución de mi script en dialog (prometo un post chulísimo cuando lo tenga un poquito mas experimentado).

-------

Llevo unos días peleándome con un script de bash que cuando lo ejecuto con crontab no funciona, he hecho varias pruebas pero ninguna me ha funcionado, así que he empezado a leer a ver si a alguien mas le pasaba esto, y efectivamente no es una cosa que sólo me pase a mi, así que os voy a contar dentro de mis conocimientos lo qué sucede.

posible solución 1:
Nuestro script está escrito para correr bajo bash, la shell por defecto de linux, si hacemos un

# echo $SHELL
/bin/bash

pero qué pasa si esto mismo lo hacemos en crontab? pues que nos devolverá /bin/sh

estas pequeñas diferencias hacen que el comportamiento de los scripts sea un poquito distinto, y que por ejemplo tar no funcione como esperamos.

Para ello debemos añadir una linea en /etc/crontab que sea así:

SHELL=/bin/bash

Mantendremos la parte de arriba intacta, dejando la de abajo para los scripts de bash y arriba para los de sh.

Posible solución 2:Si esto no funciona, quizás sea un problema de permisos de acceso del usuario que está ejecutando el script en cron.


Tenemos derechos encima de ficheros, pero también encima de dispositivos, estos segundos se pueden controlar desde el udev

bpun Blackhold, check if /dev/st0 is accessible.. if its an issue (manpage udev) <<> bpun Blackhold, device permissions change on the fly with udev...
bpun Blackhold, so just make a member for cron, or whatever user crontab runs under as... --- add this user to tape if crontab doesn't run under as root
bpun (in persay .. add user to tapegroup)
bpun if its the case
bpun Blackhold, was skimming over some doc.. apparently crontab has a runas user setting somewhere...
bpun Blackhold, can be specified for specific scripts..
bpun Blackhold, u can test to see if the device is accessible under different conditions.. with a crontab script instead of actually try to use tar with it..
bpun Blackhold, u have one of those exabyte tape drivers there?
bpun Blackhold, tar << style="font-weight: bold;">Blackhold bpun: I tried to use io but is worst than tar
bpun Blackhold, yeah.. tape drives are still king for lengthy storage biz sites.. tapes are here to last

Posible solución 3 (esta ha funcionado la 1a no, la 2a no la he probado aún)
Uno de los problemas principales que me encontraba es que un mismo script ejecutado por terminal funcionaba, en cambio por crontab no.

El problema principal se hallaba con el tar, el resto de comandos se ejecutaban correctamente, excepto el tar, así que tras buscar un poco leo que es necesario añadir la siguiente coletilla al comando:
tar opciones destination source > logfile 2>&1
esto lo que hace es mandar el
stdout y el stderr a un fichero, de esta forma los ficheros tar se crean correctamente.

http://mywiki.wooledge.org/BashFAQ/055 (interesante artículo que explica los redireccionadores de bash)

la cosa no termina aquí ;)

1 comentaris:

Marküs ha dit...

esto lo escribiste ean abril....me imagino que lo solucionaste ....

Publica un comentari a l'entrada