script copiado log.txt diariamente y renombrado con fecha

estoy intentando hacer un script que me copie el contenido de un log que se genera diariamente y me lo renombre con la fecha que corresponda
el contenido del script es el siguiente:

#!/bin/bash
_hoy=$(date +"%d_%m_%Y")
_archivo="/var/tmp/log_$_hoy.txt"
cp log.txt "$_archivo"
exit


el problema es que me tira este mensaje de error al ejecutarse:
bash: ./backup.sh: No such file or directory

el script lo he nombrado como backup.sh y lo he situado en /var/tmp

sabéis donde puede estar el error??

me pasa con Ubuntu 12.04.5 LTS

gracias
No sé si es eso lo que buscas

pero es un ejemplo:

#!/bin/bash

_hoy=$(date +"%d_%m_%Y")
_archivo="/var/log/messages"

cp $_archivo /var/tmp/$_hoy


Saludos
no me acaba de arrancar

: No such file or directory/bash
./backup.sh: line 2: $'\r': command not found
./backup.sh: line 5: $'\r': command not found
cp: cannot stat `/var/log/messages\r': No such file or directory


el archivo a copiar esta en la ruta /var/tmp
el archivo a copiar esta nombrado como log.txt
y las copias quiero hacerlas en esa misma ruta /var/tmp
ruta=/var/tmp/; file=log.txt; cp $ruta$file $ruta$(date +"%d_%m_%Y")
#!/bin/bash

cp $/var/tmp$log.txt $/var/tmp$(date +"%d_%m_%Y")



: No such file or directory/bash
./backup.sh: line 2: $'\r': command not found
cp: cannot stat `$/var/tmp.txt': No such file or directory

[agggtt] [agggtt] [agggtt]
y si usas logrotate que es precisamente para eso?

https://github.com/logrotate/logrotate
The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files. Logrotate allows for the automatic rotation compression, removal and mailing of log files. Logrotate can be set to handle a log file daily, weekly, monthly or when the log file gets to a certain size.


Disponible en tu distro favorita
Prueba así:

#!/bin/bash

cp /var/tmp/log.txt /var/tmp/log_`(date +"%d_%m_%Y")`.txt
KePeRHeLL de esa forma que tu pones si que me genera el backup, pero me sigue saliendo este error cuando lo ejecuto desde terminal:

: No such file or directory/bash
Creo que hace falta la condicional IF para verificar si el archivo existe.
1985a escribió:Creo que hace falta la condicional IF para verificar si el archivo existe.

El dice que lo tiene por eso puse así por que daba por echo que está.

También puede ser que tenga mal algún permiso.
KePeRHeLL escribió:
1985a escribió:Creo que hace falta la condicional IF para verificar si el archivo existe.

El dice que lo tiene por eso puse así por que daba por echo que está.

También puede ser que tenga mal algún permiso.


Puede ser, que tambien sea con el usuario no tenga permisos, siendo el usuario root el que haga la tarea.
Entonces, el tendria que agregar esa parte al script.

Seria, algo parecido a esto.
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1


No se mucho de programacion, pero supongo que esto ira antes de la operacion de copiado del archivo.
yo evitaria usar /var/tmp para alojar un script. No es mejor usar /usr/local/bin o /usr/local/sbin ?
Zokormazo escribió:yo evitaria usar /var/tmp para alojar un script. No es mejor usar /usr/local/bin o /usr/local/sbin ?


tanto en la ruta /usr/local/bin como en usr/local/sbin me sigue dando el mismo error:

: No such file or directory/bash


si alguno me quereis echar un cable por teamviewer, estoy dispuesto
log.txt no existe en el directorio donde estás tirando el script, no veo otra posible causa. Tienes permisos sobre /var/tmp? Y por qué usas ese directorio...? Tendría más sentido /var/log o /var/log/<tu script> para los logs y el script en cualquier otro sitio (/opt por ejemplo)
Imagen

pero el backup si que se genera:

Imagen
srca escribió:Imagen

pero el backup si que se genera:

Imagen

¿Donde tienes archivo que quieres copiar en /opt? ¿en var o en donde? y ¿a donde lo quieres copiar?
¿Cómo tienes ahora el script?
el script:

#!/bin/bash
cp /opt/log.txt /opt/log_`(date +"%d_%m_%Y")`.txt


el archivo a copiar en /opt
lo quiero copiar en /opt

lo estoy intentando en esta ruta por probar
#!/bin/bash
cp /opt/log.txt /opt/log_$(date +%d_%m_%Y).txt


prueba quitando comillas y también lanzándolo mediante 'bash backup.sh', no se me ocurre nada más, no veo nada raro salvo un mensaje anterior donde te salía un "cp: cannot stat `/var/log/messages\r': No such file or directory" cuando decías estar en "/var/tmp"
en /bin no existe el directorio bash
en /bin si existe un archivo bash

puede ser el error por esto??
una recomendacion a tus scripts ponle
set -x

al comienzo para que puedas ver que esta haciendo y en donde te esta fallando
@elchuchu y como quedaría el script entonces??
#!/bin/bash
set -x

sudo cp /opt/log.txt /opt/log_`(date +"%d_%m_%Y")`.txt


Cuando pones set -x , te ira diciendo instruccion por instruccion que es lo que esta haciendo en la consola, asi si tienes un error podras ver que es el error (archivo no existe, falta de permisos, etc)


cree un script y un archivo llamado log.txt igual al tuyo (con basura claro xd) y lo corri para que vieras que funciona y como funciona el set -x

Adjuntos

Algo tienes mal con tu #!/bin/bash o el link/binario de bash en /bin

Tampoco es muy buena idea probar las cosas como root, vas a terminar cascando algo que no debias testeando scripts como root
23 respuestas