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?
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?
Respostas:
Coloque um script shell em uma destas pastas: /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
ou /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,55
no 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 .
*/15 * * * * /path/to/command
, você pode fazer @reboot /path/to/command
para executar algo na inicialização.
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/crontab
que 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
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.
Eu recomendo o Agendador de tarefas do KDE ( 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.
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.
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
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
Exemplo de execução de script test_cron.sh
pelo 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 $USER
nos 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 myname
adicionei nova tarefa para executar a test_cron
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/syslog
Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)