Você poderia me informar o que escrever crontabpara que ele execute algum trabalho (para teste que eu usarei /usr/bin/chromium-browser) a cada 15 segundos?
Você não pode ficar abaixo da granularidade de um minuto com o cron. O que você pode fazer é, a cada minuto, executar um script que execute seu trabalho, aguarde 15 segundos e se repita. A seguinte linha crontab será iniciada a some_jobcada 15 segundos.
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
Esse script pressupõe que o trabalho nunca levará mais de 15 segundos. O script a seguir um pouco mais complexo cuida de não executar a próxima instância, se demorar muito para ser executado. Ele depende do datesuporte ao %sformato (por exemplo, GNU ou Busybox, então você estará bem no Linux). Se você o colocar diretamente em um crontab, observe que os %caracteres devem ser escritos como \%em uma linha de crontab.
No entanto, observarei que, se você precisar executar um trabalho a cada 15 segundos, o cron provavelmente será a abordagem errada. Embora os departamentos sejam bons em processos de curta duração, a sobrecarga de iniciar um programa a cada 15 segundos pode ser desprezível (dependendo da demanda do programa). Você não pode executar seu aplicativo o tempo todo e executá-lo a cada 15 segundos?
também pode ser: para i in 1 2 3 4 ; do some_job & sleep 15; done(o último sono não afetará a próxima execução), mas a maneira como você faz isso é provavelmente melhor para o tempo do correio de cronjob de saída (enviado logo após o último some_job, após 15s mais tarde) minha variante)
Para evitar que o trabalho interfira em si mesmo, limitamos seu tempo de execução a 15 segundos via GNU coreutils ' timeoutpara cada trabalho. Observe, no entanto, que se o trabalho falhar ao sair corretamente imediatamente no final dos 15 anos, você ainda poderá ter problemas. Consulte o manual de comandos para obter detalhes sobre como resolver isso se isso se tornar um problema. Observe também que, se o comando demorar mais de 15s e o tempo limite o matar, você obterá um status de saída diferente de zero, que acionará um cronjob-email.
Agradável. Se um processo demorar muito, o próximo processo provavelmente também terminará em um núcleo diferente. Não tenho certeza se você pode definir deliberadamente a afinidade principal para tarefas do Cron, mas isso pode tornar essa abordagem ainda melhor.
Tim
@ Tim bom ponto. Abordei isso um pouco em uma edição.
Otheus
2
Em resumo, o cron não é tão granular com o tempo. O período mais curto que você terá é de 1 min.
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
* * * * /usr/bin/chromium-browser
No entanto, você pode escrever um script que seja executado a cada 15 segundos ...
Eu tenho uma linha * * * * * /usr/bin/chromium-browserno crontab. De acordo com o manual, ele deve ser executado a cada minuto, mas nada está sendo executado.
xralf
É difícil escrever um script assim? Devo fazer outra pergunta ou poderia ser escrita aqui?
xralf
Os trabalhos do Cron não têm um terminal, então eu esperaria que o navegador falhasse. Isso pode ser feito silenciosamente.
BillThor
Meus registros cron estão localizados em / var / log / cron para derivadas do redhat, ie. fedora, centos etc. Também pode ajudar você a descrever exatamente o que está tentando fazer, para que as pessoas tenham uma visão completa do que está acontecendo.
Rfelsburg
1
No seu crontab:
* * * * /usr/bin/chromium-browser_starter
Então em /usr/bin/chromium-browser_starter:
#!/bin/sh
# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).
for ((secs=0; secs<46; secs+=15)); do
(sleep $secs; /usr/bin/chromium-browser "$@") &
done
wait
Respostas:
Você não pode ficar abaixo da granularidade de um minuto com o cron. O que você pode fazer é, a cada minuto, executar um script que execute seu trabalho, aguarde 15 segundos e se repita. A seguinte linha crontab será iniciada a
some_job
cada 15 segundos.Esse script pressupõe que o trabalho nunca levará mais de 15 segundos. O script a seguir um pouco mais complexo cuida de não executar a próxima instância, se demorar muito para ser executado. Ele depende do
date
suporte ao%s
formato (por exemplo, GNU ou Busybox, então você estará bem no Linux). Se você o colocar diretamente em um crontab, observe que os%
caracteres devem ser escritos como\%
em uma linha de crontab.No entanto, observarei que, se você precisar executar um trabalho a cada 15 segundos, o cron provavelmente será a abordagem errada. Embora os departamentos sejam bons em processos de curta duração, a sobrecarga de iniciar um programa a cada 15 segundos pode ser desprezível (dependendo da demanda do programa). Você não pode executar seu aplicativo o tempo todo e executá-lo a cada 15 segundos?
fonte
1 2 3 4 ; do some_job & sleep 15; done
(o último sono não afetará a próxima execução), mas a maneira como você faz isso é provavelmente melhor para o tempo do correio de cronjob de saída (enviado logo após o último some_job, após 15s mais tarde) minha variante)Abordagem diferente das outras: execute 4 cronjobs, cada um escalonado por 15 segundos:
Para evitar que o trabalho interfira em si mesmo, limitamos seu tempo de execução a 15 segundos via GNU coreutils '
timeout
para cada trabalho. Observe, no entanto, que se o trabalho falhar ao sair corretamente imediatamente no final dos 15 anos, você ainda poderá ter problemas. Consulte o manual de comandos para obter detalhes sobre como resolver isso se isso se tornar um problema. Observe também que, se o comando demorar mais de 15s e o tempo limite o matar, você obterá um status de saída diferente de zero, que acionará um cronjob-email.fonte
Em resumo, o cron não é tão granular com o tempo. O período mais curto que você terá é de 1 min.
No entanto, você pode escrever um script que seja executado a cada 15 segundos ...
fonte
* * * * * /usr/bin/chromium-browser
no crontab. De acordo com o manual, ele deve ser executado a cada minuto, mas nada está sendo executado.No seu crontab:
Então em
/usr/bin/chromium-browser_starter
:fonte
ps aux | grep chrom
depois de um minuto, não consigo ver o navegador cromo em execução.sleep
.