Ejecutar comando cada cierto tiempo Linux Server

En el trabajo estuve instalando cosas en el nuevo servidor. Es un servidor con CentOS 6.5. En un momento necesité que se ejecute un proceso cada cierta unidad de tiempo, busqué en san Google como siempre y encontré mucha información, PERO...

El asunto es que lo que encontraba no funcionaba, y nunca entendí por qué. Entonces, decidí implementar mi propia solución.

Básicamente está compuesta por tres cosas:


1. Un archivo bash que es el encargado de ejecutar cada script bash independiente (para tener todo más limpio).

2. En cada bash independiente se agregan los comandos para los backups. Por ejemplo, en el primer archivo bash independiente hago backups de las bases de datos MySQL y en el segundo de las bases de datos PostgreSQL.

3. Un programita (que pondré el código) que se encarga de ejecutar las cosas cada cierto tiempo de forma infinita.

Código del programa "loop":
vim main.c
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

void run(const char*);

int main(int argc, char** argv){

 if(argc <= 1) {
  printf("loop -(h|m|s) 

Con los siguientes tres comandos compilaremos el archivo main.c, le daremos permiso de ejecución y probaremos que funcione.
g++ main.c -o loop
chmod +x loop
./loop
Si todo sale bien al ejecutar ./loop debería mostrar:
loop -(h|m|s)

El uso del programa es simple. Dos ejemplos:

1. Loopear cada quince minutos el comando linux "echo hola".
./loop -m 15 "echo hola"
2. Loopear cada 12 horas la ejecución de "backup.sh".
./loop -h 12 ./backup.sh

 ALGO IMPORTANTE: ¿Cómo dejar corriendo un loop en background SIN que se cierre al cerrar sesión (o al salir de SSH)?

Les dejo el código completo de mi archivo backups.sh para que vean.

d=/home/dropbox/Public/ServerDedicado

# ===============================================
#   Backups
# ===============================================

# MySQL
e="$d/loop -h 12 $d/run/backup_mysql.sh"
nohup bash -c "$e" &

# ===============================================
#   Otros
# ===============================================

# FTP
e="$d/loop -m 5 $d/run/ftp_fix.sh"
nohup bash -c "$e" &



El secreto está aquí:
nohup bash -c "" &

Antes lo usaba así (también es válido):
nohup bash -c "./loop -m 5 ./run.sh" &


-----

Bueno, espero que esto les haya servido.

Hasta la próxima!

Saludos

Comentarios

Entradas populares de este blog

Ordenar lista en python - Super fácil!