Estou executando um script PHP em um cronjob e quero enviar e-mails a cada 5 minutos
Meu cronjob atual (crontab):
10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
O cronmail.php é o seguinte:
<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("[email protected]", $subject, $message, "From: $from\n");
?>
Mas não recebo um e-mail há 30 minutos com esta configuração.
cromail.php
oucronmail.php
?Respostas:
Em um
crontab
arquivo, os campos são:Assim:
significa executar
blah
10 minutos após cada hora.Se você quiser a cada cinco minutos, use:
significando a cada minuto, mas apenas a cada cinco, ou:
para os mais velhos
cron
executáveis que não entendem a*/x
notação.Se ainda parecer não estar funcionando depois disso, altere o comando para algo como:
e monitorar esse arquivo para garantir que algo está sendo escrito a cada cinco minutos. Nesse caso, há algo errado com seus scripts PHP. Se não, há algo errado com seu
cron
daemon.fonte
Seu CRON deve ter a seguinte aparência:
*/5 * * * *
O CronWTF é realmente útil quando você precisa testar as configurações do CRON.
Pode ser uma boa ideia canalizar a saída para um arquivo de log para que você possa ver se seu script está gerando erros também - já que você não os verá em seu terminal.
Além disso, tente usar um shebang na parte superior do seu arquivo PHP, para que o sistema saiba onde encontrar o PHP. Tal como:
#!/usr/bin/php
assim você pode chamar a coisa toda assim
*/5 * * * * php /path/to/script.php > /path/to/logfile.log
fonte
Você está configurando seu cron para ser executado no 10º minuto a cada hora.
Para configurá-lo para
every 5 mins
mudar para*/5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1
fonte
usr/bin/php
parte faltando*/5 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
Se você deseja executar um cron a cada
n
minuto, existem algumas opções possíveis, dependendo do valor den
.n
divide 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)Aqui, a solução é simples, fazendo uso da
/
notação:Acima,
n
representa o valorn
em
representa um valor menor quen
ou*
. Isso executará o comando nos minutosm,m+n,m+2n,...
n
NÃO divide 60Se
n
não dividir 60, você não pode fazer isso de forma limpa com o cron, mas é possível. Para fazer isso você precisa colocar um teste no cron onde o teste verifica o tempo. A melhor maneira de fazer isso é olhar o carimbo de data / hora UNIX, o total de segundos desde então1970-01-01 00:00:00 UTC
. Digamos que queremos começar a executar o comando pela primeira vez quando Marty McFly chegou em Riverdale e, em seguida, repeti-lo a cadan
minuto depois.Para que um cronjob seja executado a cada
42
minuto após `2015-10-21 07:28:00 ', o crontab ficaria assim:com
minutetestcmd
definido comoObservação: tempo do UNIX não é influenciado por segundos bissextos
Observação:
cron
não tem precisão inferior a um segundofonte
m/n
notação parece não funcionar em meus sistemas (Debian 9, Ubuntu 16.04). Só*/n
funciona. Por exemplo,5/5
ou4/10
forneçaError: bad minute; while reading /etc/crontab
syslog (no Ubuntu com cron v. 3.0pl1-128ubuntu2). Essa notação m / n foi abandonada ou está disponível apenas em alguns sistemas?m-59/n
. Apenas um intervalo pode ter um tamanho de etapa. (vejaman 5 crontab
). Eu atualizei a resposta2 etapas para verificar se um cronjob está funcionando:
Execute manualmente o comando php:
/ usr / bin / php /mydomain.in/cromail.php
E verifique se algum erro é exibido
fonte
Para definir para x minutos, precisamos definir x minutos no primeiro argumento e, em seguida, o caminho do seu script
Por 15 minutos
fonte