Executando um comando crontab a cada 59 segundos

2

Qual é a maneira mais conveniente de configurar um comando crontab para executar a cada 59 segundos, além de executar um sleep 59 no início do meu script?

Se não houver outras sugestões, a execução de sleep 59 atrasará todas as outras entradas do cron programadas para execução e esperará até que a suspensão seja concluída?

Atualizar Por que preciso disso? Eu escrevi um pequeno script para descobrir quem está logado no sistema durante o último minuto, parece assim:

who | grep 'date +%R' | awk '{ print $1 " joins us." }' | write $USER

Para que isso funcione e não complique as coisas, eu preciso que ele seja executado no final do minuto.

    
por dpq 01.10.2009 / 18:01

6 respostas

8

Isso tem um comando date que mostra o minuto anterior:

who | grep 'date -d "now -1 min" +%R' | awk '{ print $1 " joins us." }' | write $USER

Você pode executá-lo no minuto com cron :

* * * * * /some/dir/scriptname

Você pode até fazer isso:

who | grep 'date -d "now -60 sec" +%R' | awk '{ print $1 " joins us." }' | write $USER

Editar : aqui está um brinde:

awk 'FNR > 2 {printf ",\n"} {printf "%s", name; name = $0; next} END {conj = " and\n"; if (FNR == 1) {singular = "s"; conj = ""}; printf "%s%s join%s us\n", conj, name, singular}'

Saída com vírgulas, "e" e concordância verbal e remoção de frase repetida (você pode substituir as novas linhas (exceto a última) por espaços se quiser tudo em uma linha):

allen joins us

ou

bill and
chris join us

ou

dave,
ellen and
felicity join us

    
por 01.10.2009 / 18:37
7

O melhor que você pode fazer usando o cron é executá-lo a cada minuto:

# minute hour dom mon dow
* * * * * /path/to/command
    
por 01.10.2009 / 18:09
2

sleep 59 não atrasaria outras tarefas.

Mas cheira a perigo. Se você precisar desse nível de granularidade, então eu prevejo que você será solto.

Se você explicar o motivo de suas necessidades, poderá descobrir que alguém é capaz de oferecer uma cura melhor.

    
por 01.10.2009 / 18:08
2

cron não é tão preciso. Se você precisar desse nível de precisão, deve considerar escrever um daemon.

Você já pensou em usar o tail -f no auth.log e apenas observar logins constantemente?

    
por 01.10.2009 / 18:26
1

Seria melhor adicionar o script a todos os usuários .login, ou .bashrc ou similar.

1) Só funcionaria quando alguém logasse, então mais eficiente. 2) seria executado instantaneamente quando alguém logado, então sem demora.

    
por 01.10.2009 / 18:29
1

Vou apenas mencionar que o zsh tem watch builtin só isso. (Porém, você deve estar usando o zsh, e usando o seu shell, para vê-lo: ele não irá aparecer em outros terminais.)

Em resumo, adicione isso ao seu .zshrc :

watch=notme
    
por 23.11.2010 / 06:59

Tags