Configuración del logging de una secuencia de commands de copy de security remota

Así que escribí un guión corto que estoy planeando ejecutar a través de un trabajo cron diario para package de mis files del sitio y enviarlos a una location remota. También planeo incorporar vertederos de DB, pero no he llegado tan lejos todavía.

Mi problema de hoy, sin embargo, es que Im estoy inseguro de cómo registrar la salida de cada command de errores, advertencias u otra información pertinente de la order de salida. También me gustaría instalar sometype de fail safe así que si algo va horriblemente mal el guión se detiene muerto en sus pistas y me notifica por correo electrónico o algo. Ok el correo electrónico cosa no es tan crítico, pero sería bueno.

¿Alguien tiene alguna idea para eso? Esto es lo que tengo hasta ahora.

Por cierto, ambos serveres son CentOS 6.2 ejecutando LAMP estándar.

#!/bin/sh ################################# ### Set Vars ################################# THEDATE=`date +%m%d%y%H%M` ################################# ### Create Archives ################################# tar -cf /root/backups/files/server_BAK_${THEDATE}.tar -C / var/www/vhosts gzip /root/backups/files/server_BAK_${THEDATE}.tar ################################# ### Send Data to Remote Server ################################# scp /root/backups/files/server_BAK_${THEDATE}.tar.gz user@host:/home/bak1/ftp/backups/ ################################# ### Remove Data from this Server ################################# rm -rf /root/backups/files/server_BAK_${THEDATE}.tar.gz 

3 Solutions collect form web for “Configuración del logging de una secuencia de commands de copy de security remota”

Una respuesta poco desorganizada, pero solo lea, por favor.

Para que tu secuencia de commands se detenga cuando hay algún tipo de error:

 set -e 

Esto asegurará que si alguno de sus commands falla, el script fallará justo allí. Otras buenas ideas:

 function error_handler() { # This will get run when an error is detected } trap error_handler ERR 

Esto ejecutará el error_handler cuando un command falla. También puede tener un controller EXIT para ejecutar código cada vez que se cierre la secuencia de commands.

Para capturar toda la salida de su secuencia de commands en un file:

 exec &> some_log_file 

Para poder ver también los commands que ejecuta el script en el file de logging (ideal para solucionar problemas):

 set -x 

Para hacer que su script lance advertencias sobre variables indefinidas:

 set -u 

Para resumirlo, inicie su secuencia de commands con:

 trap error_handler ERR exec &> some_log_file set -eux 

Si está ejecutando el script desde cron, le enviará un correo electrónico si hay algún resultado de su script. Para get sólo el correo electrónico cuando hay un problema, ponga un cat some_log_file en el controller de errores y se establece.

Actualización : Para responder a sus otras preguntas.

  • Para evitar que un error rompa el script completo, puede ejecutar el command en una sentencia if . Como if ! <some command>; then <what do you do if it fails, or possibly nothing>; fi if ! <some command>; then <what do you do if it fails, or possibly nothing>; fi
  • Si tiene trap error_handler también necesita definir una function error_handler .
  • El set -eu y set -eux no es una mala idea, pero …
  • … si estás preocupado por la security no deberías poner la contraseña de mysql en la command-line (cualquiera que ejecute pgrep -lf mysql lo verá). Utilice un file de opciones en su lugar. Y entonces usted no necesita preocuparse de passwords en los files de logging.

     option_file=`mktemp` cat > $option_file <<EOF [client] password = $DB_PASSWD user = $DB_USER EOF 

    Y luego ejecuta mysqldump con --default-extra-path=$option_file . Y no olvide borrar $option_file cuando ya no lo necesite.

  • Utilice rsync lugar de scp . Funciona mucho mejor para copyr files relativamente grandes.

Puede networkingirigir el error de cada command a un file específico.

grep da * 2> grep-errors.txt

Esto networkingirecciona los errores desde grep al file grep-errors.txt.

grep da * 1>&2

Esto hará que la salida de un progtwig sea escrita en el mismo file descriptor que stdout.

rm -rf * 2>&1 Esto hará que la salida de stderr de un progtwig sea escrita en el mismo descriptor de file que stdout

rm -f $(find / -name core) &> /dev/null

Esto colocará cada salida de un progtwig en un file. Esto es adecuado a veces para inputs cron, si desea que un command pase en silencio absoluto. Por supuesto que puede replace / dev / null con algún file y escribir toda la salida a él.

Eso es para los errores de logging. Sé que es simple script de copy de security, pero que está tratando de redevise la rueda una vez más. Y en mi opinión deberías revisar Bacula. Es una solución bastante grande para realizar copys de security de sólo un server, pero hará todo lo que solicite en cuestión. Buckup, notificar etc y muchos más. Usted tendrá una de las mejores soluciones de copy de security. La configuration para sólo uno o pocos serveres es bastante simple y lo harás en pocas horas.

Si todavía desea utilizar su secuencia de commands, debe networkingirigir todos los errores a stdout después de añadir este script a cron que le enviará por correo electrónico cada salida de ese script. Debe comprobar sólo / etc / aliases para la input de root y escribir su correo allí como esto:

root: your@mail.com

Hice algunas actualizaciones del guión. Aquí está el nuevo. Todavía trabajando en ello sin embargo,

EDIT: Así que he hecho aún más ajustes en el script para incorporar una copy de security iterada de las bases de datos. A continuación se muestra la versión más reciente. Estoy en el process de probarlo ahora.

Mis nuevas preguntas son las siguientes: No quiero mostrar passwords para la database en el file de logging, así que establezco el primer "set" en "set -eu". Pero he decidido que quiero ver qué commands se ejecutan en el script en el file de logging, por lo que después de la iteración de DB y volcado es completo, restablecer "set" a "set -eux". ¿Es esta buena práctica lo que hice? Además, ¿cómo puedo mostrar las marcas de time en el file de logging?

 #/bin/sh ################################# ### Set Vars ################################# LOCALBAKTMP='/root/backups/files' ###~~~PLACE WHERE TMP FILES GO LOCALBAKLOC='var/www/vhosts' ###~~~DIRECTORY TO BACKUP (NO SLASH IN FRONT) REMOTEUSR='user' ###~~~USER AT REMOTE SERVER REMOTEHOST='host' ###~~~REMOTE HOST ADDRESS REMOTEDEST='/home/bak1/ftp/backups/' ###~~~FILE DESTINATION AT REMOTE LOGDIR='/root/backups/logs/' ###~~~LOCAL BACKUP LOG DIRECTORY DELLOGSDAYS='30' ###~~~DAYS TO STORE LOG FILES THEDATE=`date +%m%d%y%H%M` ###~~~DATE VARIABLE DB_BACKUP="/root/backups/files/dbs" ###~~~DB BACKUP LOCATION LOCALDBLOC="root/backups/files/dbs" ###~~~DB FILES TO BAK DB_USER="dbuser" ###~~~DB ROOT USER DB_PASSWD="dbpassword" ###~~~DB ROOT PASS HN=`hostname | awk -F. '{print $1}'` ###~~~DO NOT CHANGE ################################# ### Set Logging ################################# trap error_handler ERR exec &> ${LOGDIR}bak_${THEDATE}.log set -eu ################################# ### Dump MySQL ################################# for db in $(mysql --user=$DB_USER --password=$DB_PASSWD -e 'show databases' -s --skip-column-names|grep -vi information_schema); do mysqldump --user=$DB_USER --password=$DB_PASSWD --opt $db | gzip > "$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).sql.gz"; done #Log commands for the rest of the script set -eux ################################# ### Create Archives ################################# tar -cf ${LOCALBAKTMP}/server_BAK_${THEDATE}.tar -C / ${LOCALBAKLOC} gzip ${LOCALBAKTMP}/server_BAK_${THEDATE}.tar tar -cf ${LOCALBAKTMP}/db_BAK_${THEDATE}.tar -C / ${LOCALDBLOC} gzip ${LOCALBAKTMP}/db_BAK_${THEDATE}.tar tar -cfz full_BAK_${THEDATE}.tar.gz *_BAK_${THEDATE}.tar.gz ################################# ### Send Data to Remote Server ################################# scp ${LOCALBAKTMP}/full_BAK_${THEDATE}.tar.gz ${REMOTEUSR}@${REMOTEHOST}:${REMOTEDEST} ################################# ### Remove Data from this Server ################################# rm -f ${LOCALBAKTMP}/*_BAK_${THEDATE}.tar.gz rm -rf ${DB_BACKUP}/*.sql.gz find ${LOGDIR}* -mtime +${DELLOGSDAYS} -exec rm {} \; 
  • Evitar todo el acceso / logging IP en Apache2
  • Registro de spam de Mongodb
  • Error de service de replicación de buzones de Exchange 2010
  • ¿Hay alguna manera de ver un logging de IML del server HP ProLiant desde ESXi?
  • Apache: Registro automático de logging por host virtual?
  • Ejecute Logstalgia en el logging global remoto de Apache en un sistema WHM
  • Registro de clúster Apache httpd
  • Rotar loggings de apache basados ​​en el tamaño de file en Ubuntu
  • ¿Es esto una violación de security?
  • Administración de loggings para varias instancias dinámicas en Amazon
  • ¿Dónde está "/ var / log / messages" en mac-osx?
  • ¿Cómo puedo registrar las marcas de time con las sondas de salud de Barniz?
  • Registrando el file de logging sin perder ningún evento de logging
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.