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?
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