Como eu adiciono uma entrada ao meu crontab?

12

Estou usando o crontab pela primeira vez. Deseja escrever algumas tarefas do cron de teste muito simples e executá-las.

$crontab * * * * * echo "Hi"

não produz nada.

crontab */1 * * * * echo "hi"

diz */1: No such file or directory .

Além disso, como faço para listar as tarefas cron atualmente em execução (não apenas as que possuo, mas também aquelas iniciadas por outros usuários, como root).

E como excluo uma determinada tarefa Cron?

    
por xyz 23.09.2011 / 11:46

8 respostas

21

Você não pode usar crontab desse jeito. Use man crontab para ler sobre a maneira correta de chamar este utilitário.

Você vai querer usar crontab -e para editar as entradas cron do usuário atual (você pode adicionar / modificar / remover linhas). Use crontab -l para ver a lista atual de tarefas configuradas.

Quanto a ver os crontabs de outros usuários, isso não é possível sem ser o root nas instalações padrão. Consulte Como faço para listar todos os trabalhos cron para todos os usuários para algumas maneiras de listar tudo (como root).

Nota: tenha muito cuidado ao usar os caracteres de globalização do shell na linha de comando ( * e ? especialmente). * será expandido para a lista de arquivos no diretório atual, o que pode ter efeitos inesperados. Se você quiser passar * como argumento para algo, cite-o ( '*' ).

    
por 23.09.2011 / 12:05
4

Existem duas formas de editar o seu crontab :

  1. usando crontab -e , que abrirá o crontab no editor especificado por $VISUAL ou $EDITOR ou

  2. usando crontab crontab.txt , que simplesmente importará as entradas crontab do arquivo crontab.txt , substituindo o crontab ativo existente para o usuário atual.

Então, para remover tarefas específicas programaticamente, você pode fazer algo como

$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt

em que PATTERN é uma expressão regular que corresponderá à (s) tarefa (s) que você deseja remover. Aqui, crontab -l fornecerá seu atual crontab .

Ou, se você tiver entradas em um arquivo chamado crontab-fragment.txt que deseja remover do crontab ativo,

$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt

Isto lê o crontab atual e filtra (remove) qualquer linha que também ocorra no arquivo crontab-fragment.txt no diretório atual (usando uma comparação de cadeia de linha completa). O resultado é salvo em crontab.txt e carregado a partir daí para substituir o crontab atual.

Para adicionar uma tarefa , faça algo como

$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt

Isto supõe que o arquivo crontab-fragment.txt contenha as entradas que você gostaria de adicionar. Ele lê o crontab atual, acrescenta as entradas de crontab-fragment.txt a isso e cria crontab.txt . O arquivo crontab.txt substitui o crontab atual.

    
por 02.03.2017 / 17:53
2

Se você deseja adicionar entradas ao crontab por automação ou a partir da linha de comando, você pode fazer (definir os horários que você deseja ter)

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

Então:

service crond reload

para recarregar os crontabs.

    
por 29.03.2017 / 00:18
2

Se você quiser modificar o crontab interativamente, execute o comando crontab -e , sem outra opção. Isto irá iniciar um editor em uma cópia do crontab; quando você sair do editor , a cópia editada se tornará o novo crontab. Você pode controlar qual editor é iniciado por meio das variáveis de ambiente VISUAL e EDITOR . Para listar seu crontab, execute crontab -l .

Se você deseja modificar o crontab em um script, defina VISUAL e EDITOR como o caminho para um script ou para um fragmento de shell que modifica o arquivo fornecido. O editor ed é uma possibilidade aqui, ou sed -i se sua implementação de sed tiver essa opção. Se você quiser adicionar uma linha incondicionalmente, use echo … >> . Tome cuidado com citações; se estiver em dúvida, escreva um script e passe o nome do script como EDITOR .

script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF
    
por 24.09.2011 / 00:10
2

Para instruções sobre como editar e criar tarefas agendadas e uma explicação sobre a estrutura dos arquivos, consulte este guia de sintaxe crontab

    
por 20.09.2012 / 23:40
2

Isso é um pouco tarde, mas para os outros que estão procurando por aqui. Há maneiras mais fáceis de manipular os fluxos de entrada / saída com VISUAL e EDITOR .

Você pode simplesmente escrever sua agenda cron em um arquivo, 1 trabalho por linha, e usar o comando crontab [filename] para que você possa cat suas tarefas em filename como parte do seu script e, finalmente, chamar crontab na acabar se quiseres.

na verdade, esse é o uso mais comum, pois man crontab sugere listá-lo primeiro

    
por 02.03.2017 / 17:10
1

Experimente com este comando:

crontab -e 

adicione seu trabalho no cron:

*/1 * * * * echo "hi"

nesse arquivo.

    
por 25.02.2016 / 10:50
0

Gostaria de destacar a maneira como descrevo abaixo, embora tenha sido mencionado anteriormente em outro comentário. Eu achei extremamente útil ao adicionar as entradas a um arquivo e depois adicionar o arquivo ao crontab. Esse arquivo conteria as duas entradas abaixo e o nome do arquivo seria hello-world-crontab.txt .

  • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 0 09 * * * python /home/user/greeting.py

Em seguida, executei o comando abaixo para adicionar essas entradas ao crontab.

  • $ crontab hello-world-crontab.txt

O próximo passo é verificar se essas entradas foram adicionadas.

  • $ crontab -l

Uma breve explicação sobre o que cada entrada faz:

  • Esta entrada crontab escreve "Olá, mundo!" no arquivo /home/user/greeting.txt todos os dias às 9h.
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • Este crontab executa um arquivo python que imprime na linha de comando 'Hello world!' todos os dias às 9 horas.
    • 0 09 * * * python /home/user/greeting.py
por 12.11.2018 / 17:26