É possível configurar o cron (no linux) para ler um crontab de usuário a partir de um arquivo registrado em um aplicativo?

4

Eu gostaria de ter um conjunto de arquivos semanais por hora, como em / etc /, mas para cada aplicativo que eu executo.

Eu gostaria que o cron olhasse em

/srv/www/*/current/config/cron para eles.

Para que eu possa adicionar um novo aplicativo do Rails a / srv / www e ter o cron pegando os novos trabalhos na próxima vez que for executado.

É esse pensamento positivo?

    
por Tim Harding 18.10.2010 / 00:00

4 respostas

4

Você está tentando ter o equivalente dos diretórios cron.hourly, cron.daily, cron.weekly e cron.monthly com scripts neles para cada aplicativo de rails? Se assim for, construindo o que John disse, se você adicionar o seguinte ao seu / etc / crontab, você obterá o resultado desejado:

01 * * * * root for i in /srv/www/*/current/config/cron.hourly ; do run-parts "$i" > /dev/null 2>&1 ; done
02 4 * * * root for i in /srv/www/*/current/config/cron.daily ; do run-parts "$i" > /dev/null 2>&1 ; done
22 4 * * 0 root for i in /srv/www/*/current/config/cron.weekly ; do run-parts "$i" > /dev/null 2>&1 ; done
42 4 1 * * root for i in /srv/www/*/current/config/cron.monthly ; do run-parts "$i" > /dev/null 2>&1 ; done

Cada aplicativo pode, então, apenas especificar o subconjunto de diretórios cron.X de que precisa e preenchê-lo com os scripts relevantes.

No entanto, se você deseja ter apenas um script opcional para cada frequência de cada aplicativo, convém fazer algo mais como:

01 * * * * root for i in /srv/www/*/current/config/cron.hourly ; do [ -x "$i" ] && "$i" ; done
02 4 * * * root for i in /srv/www/*/current/config/cron.daily ; do [ -x "$i" ] && "$i" ; done
22 4 * * 0 root for i in /srv/www/*/current/config/cron.weekly ; do [ -x "$i" ] && "$i" ; done
42 4 1 * * root for i in /srv/www/*/current/config/cron.monthly ; do [ -x "$i" ] && "$i" ; done

Novamente, isso só seria executado para aplicativos que os especificassem.

Um desses que você está procurando?

    
por 18.10.2010 / 04:13
5

Faça o cron executar um programa auxiliar de hora em hora, diariamente, etc. e faça com que este programa determine se há trabalho a ser feito

    
por 18.10.2010 / 00:07
1

Um crontab típico terá entradas como

# run-parts
01 * * * * root run-parts /etc/cron.hourly > /dev/null 2>&1
02 4 * * * root run-parts /etc/cron.daily > /dev/null 2>&1
22 4 * * 0 root run-parts /etc/cron.weekly > /dev/null 2>&1
42 4 1 * * root run-parts /etc/cron.monthly > /dev/null 2>&1

Não sou especialista, mas não consigo ver nenhum motivo pelo qual você não possa adicionar outros diretórios da mesma maneira. Se você quiser que seja mais automático, você pode ter um script periodicamente para procurar pelos diretórios cron. * Começando na sua raiz escolhida e adicionar programaticamente esses caminhos ao / etc / crontab se eles já não existirem lá.

    
por 18.10.2010 / 01:11
0

Primeiro, crie um script de Bash assim:

#!/bin/bash
for web_job in /srv/www/*/current/config/cron/*;
 do [ -x $web_job  ] && $web_job || : ;
done

Salve como algo como /srv/www/run_web_jobs.sh. Em seguida, adicione-o como um trabalho cron. Por exemplo, para que seja executado diariamente (deve ser root):

$ ln -s /etc/cron.daily/ /srv/www/run_web_jobs.sh

Ou adicione-o ao crontab de um usuário.

$ crontab -e
    
por 18.10.2010 / 02:29

Tags