Eu tenho um script que precisa ser executado a cada cinco segundos. Eu sei que isso cron
pode fazer tarefas a cada minuto, mas existe uma maneira de executar algo a cada segundo?
sleep 5
pausa (talvez dentro de um loop) por 5 segundos) ...?
Eu tenho um script que precisa ser executado a cada cinco segundos. Eu sei que isso cron
pode fazer tarefas a cada minuto, mas existe uma maneira de executar algo a cada segundo?
sleep 5
pausa (talvez dentro de um loop) por 5 segundos) ...?
Respostas:
Cron permite apenas um mínimo de um minuto. O que você pode fazer é escrever um script de shell com um loop infinito que executa sua tarefa e, em seguida, dorme por 5 segundos. Dessa forma, sua tarefa seria executada mais ou menos a cada 5 segundos, dependendo de quanto tempo a tarefa em si leva.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
Você pode criar um my-task.sh
arquivo com o conteúdo acima e executá-lo com sh my-task.sh
. Opcionalmente, você pode configurá-lo supervisor
como um serviço para que ele inicie quando o sistema inicializar, etc.
Realmente parece que você está fazendo algo que provavelmente não deveria estar fazendo. Isso parece errado .
Você pode ter um cron
trabalho iniciando um script a cada minuto, iniciando assim 12 processos em segundo plano:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
Minha pergunta, no entanto, é o que você faria no EARTH que precisa ser executado a cada 5 segundos?
/media
diretório para uma unidade de I ligar para usb para backups automáticos ...
What on EARTH
- estatísticas, coleta de lixo, sincronização de arquivos, status online, o nome dele.
Basta usar um loop:
while true ; do ./your-script & sleep 5; done
Isso iniciará seu script como um trabalho em segundo plano, durma por 5 segundos e depois repetirá novamente. Você pode usar Ctrl-C para abortá-lo ou usar qualquer outra condição em vez de true
, por exemplo, ! test -f /tmp/stop-my-script
para fazer um loop apenas enquanto o arquivo /tmp/stop-my-script
não existir.
bash: syntax error near unexpected token ';'
, então eu o tirei. Eu tenho bash 4.3.11. Meu comando é executado rapidamente, então tudo bem se for executado em primeiro plano.
./your-script
executar em segundo plano (durante os 5 segundos de sono), você poderia manter &
apenas a queda ;
. Como &
serve ao propósito de separar os comandos, não é necessário (e aparentemente não é permitido) ter ;
o mesmo na mesma linha. Outra maneira é escrever o loop em várias linhas (com uma quebra de linha depois &
e, opcionalmente, quebras de linha depois do
e antes done
). Como o ;
depois &
parece ser um erro de digitação, eu o removi. blueyed: Por favor, sinta-se livre para colocar as ;
costas, se você realmente quiser; Nesse caso, sugiro também adicionar uma explicação.
Você pode usar o pacote GNU mcron , uma alternativa "Vixie cron".
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"Pode permitir facilmente a especificação de pontos de tempo mais refinados, ou seja, segundos. Em princípio, isso pode ser estendido a microssegundos, mas isso não é implementado."
mcron
requer sendmail
estar instalado e ativado por padrão. como desativá-lo?
A configuração mínima no cron é de minutos, não é possível defini-la por 5 segundos. Você pode usar o quartzo, que permite segundos. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
Use cactos para monitorar o roteador e o switch, mas o Cron permite apenas um período mínimo de um minuto; portanto, se uma porta / dispositivo estiver inativa, não haverá aviso até dois minutos depois.
Você pode usar uma unidade de timer SystemD, que acionará um serviço - que você configurou para fazer o que deseja - a cada 5 segundos.
Suponha que sua unidade de serviço seja chamada mystuff.service
e esteja instalada /etc/systemd/system
(consulte Serviços do usuário do SystemD se você deseja substituir o crontab de um usuário); em seguida, você pode escrever uma unidade de timer para executar o serviço no momento da inicialização e depois a cada 5 segundos, assim:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
Em seguida, recarregue a configuração do sistema, ative a unidade de timer e inicie-a.
Eu fiz esse tipo de coisa com muito sucesso (e o resultado final é repetido semanas por vez, até que a máquina seja reiniciada). Quanto ao que eu estava fazendo agora, atualizando informações e colocando-as em cache - atualizando a cada 10 segundos.
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
O 'exec $ 0' reinicia o script, mas substitui o script em execução. Ele pode ser iniciado inicialmente com uma linha crontab '@reboot'.
while
loop em vez de reiniciar repetidamente o script?