Tengo un script de respaldo que necesito ejecutar en un momento determinado del día, así que lo estoy usando cronpara esta tarea y desde dentro de cron también estoy tratando de redirigir la salida del script de respaldo a logfile.
crontab -e
*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log
En la entrada cron anterior, estoy redirigiendo ambos stderr and stdouta un archivo de registro.
El trabajo cron anterior se ejecuta bien syslog y realiza la tarea mencionada en el backup.sharchivo, pero no escribe nada en el archivo de registro.
/var/log/syslog
Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)
Cuando ejecuto el script desde cli, funciona según sea necesario y la salida se escribe en un archivo de registro
ranveer@ranveer:~$ ./backup.sh &>> backup.log
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
ranveer@ranveer:~$
Entonces, ¿por qué la salida del archivo no se redirige al archivo desde cron?
bash
io-redirection
cron
RanRag
fuente
fuente

Respuestas:
Resolví el problema. Hay dos maneras:
M1
Cambie la redirección de
&>>a2>&1. Entonces ahoracrontab -epareceCreo que lo anterior funciona porque de forma predeterminada
cronse usashpara ejecutar la tarea en lugar debashque&>>no sea compatible consh.M2
Cambie el shell predeterminado agregando
SHELL=/bin/bashelcrontab -earchivo.fuente
crones comosh: no selecciona un solo programa. Hay muchas implementaciones. La implementación más frecuente es Vixie cron. Soy el autor (actual, no el original) de otro. Creo que la mayoría de los demonios cron usarán los del sistemash, pero eso puede variar si acepta&>>. Algunos demonios cron (como el mío) no le permiten cambiar qué shell ejecuta las líneas cron conSHELL=...líneas en el crontab. Me alegra que hayas encontrado una solución que funcione para ti; Simplemente pensé que valía la pena señalar que hay muchas variables que podrían afectar si funciona para otros.YYYY-MM-DD_hh-mm-secen el nombre del archivo de salida, para que cada nombre de archivo sea diferente y se mantenga sin reescribir?*/1 * * * * /home/ranveer/vimbackup.sh &>> /home/ranveer/vimbackup.loghace lo mismo tambiéndescargo de responsabilidad [1].
Me gustaría agregar una nota al pie o un apéndice a la respuesta de @ RanRag .
Asegúrese de que su sintaxis de redirección de shell se ajuste a
/bin/sh. Si intenta utilizar la sintaxis de redirección de shell que no es válida,/bin/shentonces su comando fallará y su trabajo cron nunca se ejecutará.En sus
/etc/cron.d/example1archivos de configuración, si especifica un usuario distinto derooty el shell de inicio de sesión de ese usuario no es/bin/bash... aún debe usar la sintaxis / bin / sh en el/etc/cron.d/example1comando.Por ejemplo
Si el usuario tiene la cáscara
cshozshokshfijado para su shell de entrada. En su/etc/cron.d/example1archivo de configuración, el comando debe usar la/bin/shsintaxis. Específicamente, cualquier redirección de shell debe ser/bin/shsintaxis.Si intenta utilizar, por ejemplo, la
cshsintaxis de redirección de shell en su/etc/cron.d/example1, entonces su trabajo cron nunca se ejecutará. El archivo de registro paracrondubicado en/var/log/crondirá que el comando se ejecuta, pero el comando generará un error de sintaxis antes de que se ejecute el comando.¿Dónde
crondemite mensajes de error para un error de sintaxis?El error nunca se informa en
/var/log/cron.cronden su lugar, por defecto, emite cualquier mensaje de error usandomail. Por lo tanto, debe verificar/var/spool/mail/${USER}para ver cuál es el error.[1]
Descargo de responsabilidad
sysvsistemasystemdla información puede diferircentos-6distribución y puede no aplicarse a diferentessysvdistribucionescentos-6específicamente, porque diferentes distribuciones pueden tener unacrondimplementación diferente que difiere decentos-6fuente
/etc/cron.d/example1comando use un shell diferente, puede usar setSHELL=en su/etc/cron.d/example1archivo de configuración.