Como faço para configurar um trabalho Cron?

534

Quero agendar uma tarefa para ser executada regularmente e ouvi dizer que Cron é a maneira de fazer isso.

Como adiciono trabalhos do Cron no Ubuntu?

Gabriel Solomon
fonte

Respostas:

655

Coloque um script shell em uma destas pastas: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlyou /etc/cron.weekly.

Se isso não lhe bastar, você pode adicionar tarefas mais específicas, por exemplo, duas vezes por mês ou a cada 5 minutos. Vá para o terminal e digite:

crontab -e

Isso abrirá seu crontab pessoal (arquivo de configuração cron). A primeira linha desse arquivo explica tudo! Em cada linha, você pode definir um comando para executar e sua programação, e o formato é bastante simples quando você pega o jeito. A estrutura é:

minute hour day-of-month month day-of-week command

Para todos os números que você pode usar listas, por exemplo, 5,34,55no campo de minutos, será executado às 5, 34 e 55, independentemente da hora definida.

Você também pode usar intervalos. Eles são definidos como este: */20. Este exemplo significa a cada 20, portanto, na coluna de minutos, é equivalente a 0,20,40.

Então, para executar um comando toda segunda-feira às 5:30 da tarde:

30 17 * * 1 /path/to/command

ou a cada 15 minutos

*/15 * * * * /path/to/command

Observe que o dia da semana varia de 0 a 6, onde 0 é domingo.

Você pode ler mais aqui .

LassePoulsen
fonte
7
Estes são de todo o sistema e são executados com altos privilégios. Eu não colocaria nada lá, a menos que haja uma necessidade premente de acesso ou permissão. Como regra geral, tente fazer coisas sem recursos. Portanto, eu gosto desta resposta melhor: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/...
H Marcelo Morales
5
@ Marcelo Morales, que também executará os comandos fornecidos como root! se você, por outro lado, não usar o sudo, criará um usuário crontab e ele será executado como o usuário que o criou!
procurando
4
* / 15 * * * * / path / to / command foi muito útil para mim! obrigado!
Andrew Odendaal
18
Vale a pena notar que essas alterações são aplicadas automaticamente; você não precisa reiniciar / recarregar nada.
Molomby
6
Outra dica útil é que, em vez de */15 * * * * /path/to/command, você pode fazer @reboot /path/to/commandpara executar algo na inicialização.
Kenneth Worden
102

Se o trabalho que você deseja executar pode ser executado com os mesmos privilégios do seu usuário, recomendo o uso de um usuário crontab que você pode editar executando EDITOR="gedit" crontab -e(que usará o gedit para editar o arquivo crontab) ou simplesmente crontab -e(que usará o editor padrão) em um terminal.

Se você deseja executar algo a cada 10 minutos, por exemplo, adicione uma linha como esta

*/10 * * * * /usr/bin/somedirectory/somecommand

e salve o arquivo.

Você pode ver o conteúdo do usuário crontab com crontab -l.

Para adicionar um trabalho cron que seja executado como root, você pode editar o crontab do root executando sudo crontab -e.

A maneira mais flexível é usar o crontab do sistema, /etc/crontabque você pode editar apenas com privilégios de root. Nesse arquivo, o usuário que cada comando deve ser executado conforme especificado, para que você possa executar seus comandos como root (caso precise desse nível de privilégio) ou qualquer outro usuário no sistema.

Por exemplo, se você quiser executar algo a cada 10 minutos como root, adicione uma linha como esta

*/10 * * * * root /usr/bin/somedirectory/somecommand

(observe a adição do usuário à linha)

Você pode ver o conteúdo do arquivo crontab do sistema com cat /etc/crontab.

Mais detalhes em: https://help.ubuntu.com/community/CronHowto

Li Lo
fonte
1
Aqui está um doce manipulador cron interativo que fornecerá a você o tempo cronológico em
CTS_AE
52

Se você preferir fazê-lo usando uma GUI, poderá acessar o Centro de Software e instalar tarefas agendadas (ou executar sudo apt-get install gnome-schedule). Ele fornecerá uma GUI poderosa para adicionar tarefas cron.

Observe que, se você usar esse método, as tarefas por padrão serão executadas como seu próprio usuário, não como root. Isso geralmente é uma coisa boa.

Javier Rivera
fonte
3
não está disponível para 16.04, aparentemente bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060 #
#
@TankorSmash Você pode obtê-lo aqui
M. Becerra
Os requisitos do pacote não podem ser atendidos no 16.04
Odysseus Ithaca /
26

Eu recomendo o Agendador de tarefas do KDE ( kde-config-cron) Instale o kde-config-cron . Acesse-o nas Configurações do sistema no módulo Agendador de tarefas .

Ele gerencia os Crontabs pessoais e do sistema, e a facilidade de criar limites de tempo me surpreendeu bastante (veja a captura de tela abaixo). Eu acho que essa parte é realmente subestimada.

insira a descrição da imagem aqui

gertvdijk
fonte
11

O Agendador de tarefas do KDE não funcionará no Ubuntu comum. Funciona apenas em sistemas KDE como o KUbuntu. Para sistemas que não são do KDE, você prefere usar o gnome-schedule

$ sudo apt-get install gnome-schedule

O aplicativo é Tarefas agendadas no Dash.

Antonio
fonte
Não foi encontrado para o Ubuntu 16.04
SaidbakR
Por favor, dê uma olhada em I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… . Há um pacote para baixar @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Apenas execute$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio
10

Eu queria definir um trabalho do Cron para executar um script bash, portanto, a execução do script adicionaria um trabalho cron.

Percebi que quando você faz uso de:

crontab -e 

Em seguida, ele cria o arquivo:

/var/spool/cron/crontabs/root

Onde root é o nome do usuário executando o comando crontab. Portanto, com base nisso e no 14.04, pelo menos, podemos executar os seguintes comandos bash para criar um novo trabalho Cron:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Também precisamos definir a propriedade correta para o arquivo:

chown root:root /var/spool/cron/crontabs/root

E defina as permissões corretas:

chmod 600 /var/spool/cron/crontabs/root

Se, ao executar crontab -e, já houver trabalhos Cron na lista, você poderá anexá-lo usando o seguinte comando:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Craig van Tonder
fonte
2

Exemplo de execução de script test_cron.shpelo cron a cada minuto no Ubuntu 18.04 usando o link simbólico:

test_cron.sh Arquivo:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

Se você deseja usar variáveis ​​de ambiente em seu script, como $USERnos caminhos, é melhor digitar o caminho preciso, o bash não conhecerá suas variáveis ​​no tempo de execução.

myname é o nome de usuário (parte do grupo raiz, não tenho certeza de que sejam necessários privilégios de raiz).

Permita que os usuários definam tarefas cron, o arquivo será criado se necessário:

sudo nano /etc/cron.allow

root
myname

O caminho para o script é /home/myname/shell/test_cron.sh

Mudei o proprietário e o tornei executável:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

Adicionei link simbólico:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Registrado quando mynameadicionei nova tarefa para executar a test_croncada minuto.

crontab -e

*/1 * * * * test_cron

Para verificar se o comando na lista:

crontab -l

*/1 * * * * test_cron

Para verificar a execução

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Alexander
fonte