Como faço para configurar um trabalho Cron?

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

Como faço para adicionar trabalhos Cron no Ubuntu?

Coloque um script de shell em uma dessas pastas: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly ou /etc/cron.weekly.

Se isso não for suficiente para você, 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 nesse 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 dele. A estrutura é:

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

Para todos os números, você pode usar listas, por exemplo. 5,34,55 no campo minutos significará executar em 5 passado, 34 passado, e 55 passado qualquer hora é definida.

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

Então, para executar um comando todas as segundas-feiras à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 vai de 0 a 6, onde 0 é Domingo.

Você pode ler mais aqui.

Se o trabalho que você deseja executar puder ser executado com os mesmos privilégios que seu usuário, recomendo usar um crontab de usuário 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ê quiser 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 cron job executado como root, você pode editar o crontab do root executando sudo crontab -e.

A maneira mais flexível é usar o sistema crontab /etc/crontab que você pode editar apenas com privilégios de root. Neste arquivo, o Usuário 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, você adicionaria 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

Se você preferir fazer isso usando uma GUI, você pode ir ao centro de Software e instalar Tarefas agendadas (ou correr 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.

Eu recomendo Agendador de Tarefas do KDE (kde-config-cron) . Acessá-lo a partir do definicao no Agendador De Tarefas módulo lá.

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

O Agendador de Tarefas do KDE não funcionará no Ubuntu regular. Funciona apenas em sistemas KDE como o KUbuntu. Para o sistema não KDE, você preferirá usar gnome-schedule

$ sudo apt-get install gnome-schedule

O aplicativo está agendado tarefas no traço.

Eu queria definir um Cron job para executar um script bash, então executar o script adicionaria um cron job.

Eu 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 quando você corre crontab -e já existem trabalhos Cron na lista e, em seguida, você pode anexar à lista usando o seguinte comando:

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

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

test_cron.sh arquivo:

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

Se você quiser usar variáveis de ambiente em seu script como $USER em caminhos, é melhor digitar caminho preciso, o bash não conhecerá suas variáveis no momento da execução.

myname é nome de usuário (parte do Grupo Raiz, Não tenho certeza se os privilégios de root são necessários).

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

sudo nano /etc/cron.allowrootmyname

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

Eu mudei o proprietário e o tornei executável:

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

Eu adicionei o link simbólico:

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

Registrado como myname Eu adicionei nova tarefa para executar test_cron a cada 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/syslogNov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)

Considerando que você tem trabalhos de multiple cron com um usuário específico e eles não compartilham a mesma programação. Você pode simplesmente criar um arquivo em /etc/cron.d/Digamos que o nome do arquivo seja myjobs em seguida, basta escrever todos os seus agendadores nesse arquivo e executar o seguinte comando.

crontab -u <username> /etc/cron.d/myjobs