404 Not Found


nginx
{"id":3597,"date":"2014-06-24T11:20:11","date_gmt":"2014-06-24T14:20:11","guid":{"rendered":"https:\/\/cleuber.com.br\/?p=3597"},"modified":"2016-07-14T20:28:44","modified_gmt":"2016-07-14T23:28:44","slug":"agendador-de-tarefas-cron-no-linux","status":"publish","type":"post","link":"https:\/\/cleuber.com.br\/index.php\/2014\/06\/24\/agendador-de-tarefas-cron-no-linux","title":{"rendered":"Agendador de Tarefas Cron no Linux"},"content":{"rendered":"

Introdu\u00e7\u00e3o<\/h3>\n

O Cron \u00e9 um programa que roda em\u00a0sistemas Unix e GNU\/Linux, e este programa pode executar comandos e programas de acordo com uma agenda determinada. Ou seja, o Cron \u00e9 um agendador de tarefas do sistema operacional.<\/p>\n

Esta agenda pode ser configurada dentro do arquivo de tabela \u201c\/etc\/crontab\u201d, e tamb\u00e9m pode estar em um diret\u00f3rio que cria um crontab para cada usu\u00e1rio do sistema (geralmente em \/var\/spool\/cron\/). Mas a maneira mais simples de criar uma entrada de agendamento no cron, \u00e9 atrav\u00e9s do comando “crontab -e”<\/strong>.<\/p>\n

Usando o Cron Pela Primeira Vez<\/h4>\n

A primeira vez que voc\u00ea rodar este comando, ele ir\u00e1 perguntar-lhe qual editor de texto prefere usar para faz\u00ea-lo, e uma vez escolhida, ele usar\u00e1 esse editor nas pr\u00f3ximas vezes.
\nComo pode perceber na imagem abaixo, ele recomenda usar o “nano”, pois \u00e9 o “easiest”, ou seja “o mais f\u00e1cil” de usar.<\/p>\n

\"cron1\"<\/a><\/p>\n

Fun\u00e7\u00f5es do Crontab<\/h3>\n

Exemplos de Agendamentos:<\/h4>\n

2 – Agendas Simples com Script em Shell Em Pastas do Cron.<\/h4>\n

Se voc\u00ea tiver uma tarefa que precisa ser executada apenas uma vez por dia, ou por semana, n\u00e3o importando tanto com o hor\u00e1rio de execu\u00e7\u00e3o, voc\u00ea poder\u00e1 criar um script em shell, e ao inv\u00e9s de editar o crontab (inserindo uma entrada que aponta para a localiza\u00e7\u00e3o do script, com os par\u00e2metros de agendamento), basta colocar seu script dentro de diret\u00f3rios espec\u00edficos do cron e eles ser\u00e3o executados conforme a rotina de cada diret\u00f3rio<\/strong>, que s\u00e3o:<\/p>\n

\/etc\/cron.daily – di\u00e1rio
\n\/etc\/cron.hourly – a cada hora
\n\/etc\/cron.monthly – mensal
\n\/etc\/cron.weekly \u2013 semanal<\/p>\n

2 – Agendas Detalhadas<\/h4>\n

Editando o arquivo crontab, \u00e9 poss\u00edvel inserir uma entrada definindo hor\u00e1rios de execu\u00e7\u00e3o de um script ou comando, como por exemplo, \u201ctodos os dias \u00e0s 5 da manh\u00e3\u201d<\/strong> ou \u201ca cada meia hora\u201d<\/strong>, \u201cde dez em dez minutos\u201d<\/strong>.<\/p>\n

Ent\u00e3o, o mais comum \u00e9\u00a0fazer o agendamento dentro de um hor\u00e1rio espec\u00edfico, e como eu disse, precisar\u00e1 editar o arquivo \/etc\/crontab.<\/p>\n

Para editarmos o crontab voc\u00ea poder\u00e1 faz\u00ea-lo de 2 formas.
\n1 – Ediando o arquivo \/etc\/crontab, usando seu editor de texto. Exemplo: sudo nano\u00a0\/etc\/crontab
\n<\/strong>2 – Usando o comando padr\u00e3o “crontab -e”<\/strong>. (Este \u00e9 mais recomend\u00e1vel).<\/p>\n

Poder\u00e1 usar outros comandos para gerenciar o cron tamb\u00e9m:<\/p>\n

crontab -l (para listar),<\/strong>
\ncrontab -d (para remover).<\/strong><\/p>\n

Visualizando o Cron de Seu Sistema<\/h3>\n

Com o comando cat \/etc\/crontab<\/strong>, podemos observar o conte\u00fado do arquivo.
\n—————————————————————————————————————————-
\n# \/etc\/crontab: system-wide crontab
\n# Unlike any other crontab you don’t have to run the `crontab’
\n# command to install the new version when you edit this file
\n# and files in \/etc\/cron.d. These files also have username fields,
\n# that none of the other crontabs do.
\nSHELL=\/bin\/sh
\nPATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/sbin:\/bin:\/usr\/sbin:\/usr\/bin<\/p>\n

# m h dom mon dow user command
\n17 * * * * root cd \/ && run-parts –report \/etc\/cron.hourly
\n25 6 * * * root test -x \/usr\/sbin\/anacron || ( cd \/ && run-parts –report \/etc\/cron.daily )
\n47 6 * * 7 root test -x \/usr\/sbin\/anacron || ( cd \/ && run-parts –report \/etc\/cron.weekly )
\n52 6 1 * * root test -x \/usr\/sbin\/anacron || ( cd \/ && run-parts –report \/etc\/cron.monthly )
\n—————————————————————————————————————————-<\/p>\n

Com o comando crontab -l<\/strong>, podemos listar o crontab de seu usu\u00e1rio.
\nObs.<\/strong> Repare que n\u00e3o h\u00e1 nenhum\u00a0agendamento ainda, e que todas as linhas est\u00e3o comentadas (#), mas ele d\u00e1 um exemplo na antepen\u00faltima linha de como seria um agendamento para as 5 da manh\u00e3 diariamente rodar o comando de compacta\u00e7\u00e3o da sua pasta home e salv\u00e1-la em \/var\/backups.<\/p>\n

—————————————————————————————————————————-<\/p>\n

# Edit this file to introduce tasks to be run by cron.
\n#
\n# Each task to run has to be defined through a single line
\n# indicating with different fields when the task will be run
\n# and what command to run for the task
\n#
\n# To define the time you can provide concrete values for
\n# minute (m), hour (h), day of month (dom), month (mon),
\n# and day of week (dow) or use ‘*’ in these fields (for ‘any’).#
\n# Notice that tasks will be started based on the cron’s system
\n# daemon’s notion of time and timezones.
\n#
\n# Output of the crontab jobs (including errors) is sent through
\n# email to the user the crontab file belongs to (unless redirected).
\n#
\n# For example, you can run a backup of all your user accounts
\n# at 5 a.m every week with:
\n# 0 5 * * 1 tar -zcf \/var\/backups\/home.tgz \/home\/
\n#
\n# For more information see the manual pages of crontab(5) and cron(8)
\n#
\n# m h dom mon dow command<\/p>\n

—————————————————————————————————————————-<\/p>\n

Estrutura do Cron<\/h3>\n

Como podemos perceber acima, j\u00e1 existem algumas entradas do sistema. E a ordem dos par\u00e2metros se d\u00e1 da seguinte forma:<\/p>\n

minuto, hora, dia do m\u00eas, m\u00eas, dia da semana, usu\u00e1rio, e comando. <\/strong><\/pre>\n

A cada espa\u00e7o, se avan\u00e7a um campo e os campos seguem este padr\u00e3o descrito acima.<\/p>\n

Observe os limites de cada campo, por exemplo, no campo m\u00eas n\u00e3o pode ter 15, pois temos de 1-12 meses no ano, e o campo da semana usamos de 0 a 7 onde zero e 7 \u00e9 domingo 1 \u00e9 segunda-feira, 2 ter\u00e7a-feira e assim por diante. Se usarmos no campo semana, por exemplo 1-5, ele rodar\u00e1 o comando de segunda a sexta-feira.<\/p>\n

\"CRONTAB\"<\/a><\/h4>\n

Caracteres que facilitam a vida:<\/h3>\n

Caractere<\/span> \u00a0\u00a0 \u00a0Exemplo<\/span> \u00a0\u00a0 \u00a0Significado<\/span>
\nH\u00edfen \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 2-4 \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 intervalo de 2 a 4
\nVirgula \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a02,4,6,8 \u00a0\u00a0 \u00a0 \u00a0 \u00a0\u00a0 os n\u00fameros 2,4,6 e 8 (como dias da semana espec\u00edficos apenas)
\nBarra \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 *\/10 \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 de dez em dez
\nAsterisco \u00a0\u00a0 \u00a0\u00a0 *\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 todas as op\u00e7\u00f5es poss\u00edveis<\/p>\n

No lugar dos n\u00fameros da agenda podemos usar essas op\u00e7\u00f5es tamb\u00e9m:<\/p>\n

@reboot
\n@daily
\n@monthly<\/p>\n

Exemplos ser\u00e3o dados mais abaixo.<\/p>\n

NA PR\u00c1TICA<\/span><\/h3>\n

3 PASSOS PARA CRIAR UM AGENDAMENTO PARA EXECU\u00c7\u00c3O DE UM SCRIPT:<\/span><\/h4>\n

Vamos criar uma rotina de backup que comprime a pasta \/home e o \/var\/log e queremos que esta rotina aconte\u00e7a diariamente \u00e0s 8:45, entre outros agendamentos.
\nPara fazermos isso, ao inv\u00e9s de criarmos duas entradas no crontab, sendo uma para compactar e outra para copiar os arquivos para o local desejado, ser\u00e1 mais f\u00e1cil criar um simples script em shell e criar uma entrada apenas no crontab que rodar\u00e1 esse script.<\/p>\n

1 – Criando um Script de Backup com Timestamp.<\/span><\/h4>\n

\"papiro\"<\/a><\/p>\n

Vamos criar um script que dever\u00e1:<\/p>\n

1 – Comprimir as pastas \u201c\/home\u201d e \u201c\/var\/log\u201d usando “tar” (empacotar) e “gz” (comprimir);
\n2 – Copi\u00e1-las para a parti\u00e7\u00e3o de Dados;
\n3 – Com Time Stamp – de modo que o nome do arquivo fique com a data do dia da execu\u00e7\u00e3o;
\n4 – E ainda criando um arquivo de log localizado no \/scriptbkplog.log para posterior an\u00e1lise.<\/p>\n

Crie com o gedit ou no terminal com seu editor de texto favorito, um script chamado \u201cscriptbkp.sh\u201d. Pode-se fazer isso com o comando: \u201csudo gedit \/scriptbkp.sh\u201d, ou se preferir usar o \u201cvi\u201d ou o “nano” para fazer tudo no terminal: \u201csudo nano \/scriptbkp.sh\u201d<\/p>\n

Vamos inserir este conte\u00fado abaixo dentro do arquivo criado:<\/p>\n

#!\/bin\/sh\r\n tar -cvzf \/media\/Dados\/bkphome$(date +%Y_%m_%d).tar.gz \/home >> \/scriptbkplog.log\r\n tar -cvzf \/media\/Dados\/bkplog$(date +%Y_%m_%d).tar.gz \/var\/log >> \/scriptbkplog.log<\/pre>\n

Salve e feche.<\/p>\n

2 \u2013 Permiss\u00e3o de execu\u00e7\u00e3o<\/span><\/h4>\n

Agora, vamos dar permiss\u00e3o de execu\u00e7\u00e3o tamb\u00e9m:<\/p>\n

sudo chmod 755 \/scriptbkp.sh<\/pre>\n

3 \u2013\u00a0Agendando no Cron – 5 Exemplos<\/span><\/h4>\n

Agora vamos editar o crontab, criando uma agenda que rode este script diariamente, s\u00f3 que as 8:45 da manh\u00e3<\/strong>.
\nEdite o crontab com seu editor de texto favorito (\u201cvi\u201d, \u201cvim\u201d, \u201cnano\u201d ou com o gedit, caso esteja usando ambiente gr\u00e1fico).<\/p>\n

sudo gedit \/etc\/crontab\r\nou\r\nsudo crontab -e<\/pre>\n

Exemplo 1:<\/span> <\/span><\/h4>\n

Para que todos os dias da semana, todos os meses, todos os dias do m\u00eas, na hora 8 e minuto 45 ele execute o script e envie o backup para a parti\u00e7\u00e3o \/media\/Dados.
\nAdicione a seguinte linha:<\/p>\n

45 8 * * * \/scriptbkp.sh<\/pre>\n

Exemplo 2:<\/span><\/h4>\n

Se quisermos a execu\u00e7\u00e3o\u00a0apenas na segunda-feira e depois s\u00f3 no s\u00e1bado as 09:30. A linha ficar\u00e1 assim:
\n(repare a v\u00edrgula entre o 1 e o 6 – segunda e s\u00e1bado)<\/p>\n

30 09 * * 1,6 \/scriptbkp.sh<\/pre>\n

Exemplo 3:<\/span><\/h4>\n

Se quisermos toda hora, das 8:00 as 18:00 de segunda a sexta:<\/p>\n

00 8-18 * * 1-5 \/scriptbkp.sh<\/pre>\n

Exemplo 4:<\/h4>\n

Se quisermos fazer com que o script rode de hora em hora (sem agenda de dias espec\u00edficos), diariamente, semanalmente ou mensalmente, ao inv\u00e9s de inserirmos uma entrada no crontab, basta copiar ou mover o script para a pasta especial do cron desejada.<\/p>\n

sudo cp \/scriptbkp.sh \/etc\/cron.monthly\r\nsudo cp \/scriptbkp.sh \/etc\/cron.hourly\r\nsudo cp \/scriptbkp.sh \/etc\/cron.weekly\r\nsudo cp \/scriptbkp.sh \/etc\/cron.diary<\/pre>\n

Ou Usarmos o caractere “@” para rodar ap\u00f3s todo o reboot, diariamente ou mensalmente:<\/p>\n

@reboot \/scriptbkp.sh\r\n@daily\u00a0\/scriptbkp.sh\r\n@monthly\u00a0\/scriptbkp.sh<\/pre>\n

Exemplo 5:<\/h4>\n

Tarefa simples, sem o uso de script<\/strong><\/p>\n

Neste exemplo vamos rodar um comando que copie todo o conte\u00fado de minha pasta pessoal para minha parti\u00e7\u00e3o de Dados ou um HD externo de segunda a sexta-feira as 8:30 da manh\u00e3.<\/p>\n

Basta adicionar uma linha como esta, claro, que com o nome de sua pasta pessoal e de seu Hd externo ou parti\u00e7\u00e3o de dados, ou diret\u00f3rio de rede que desejar.<\/p>\n

30 8 * * 1-5 root cp -r \/home\/cleuber \/media\/hd-externo<\/pre>\n

Visualizando o log de tarefas do Cron<\/h3>\n

Para ver se as tarefas rodaram adequadamente atrav\u00e9s da an\u00e1lise de logs, d\u00ea uma olhada neste artigo:
\nhttps:\/\/cleuber.com.br\/index.php\/2016\/01\/19\/gerenciando-os-logs-do-cron<\/a><\/span><\/p>\n

Bom, \u00e9 isso a\u00ed pessoal!<\/p>\n

Mais alguma dica? Deixe a\u00ed sua opini\u00e3o.<\/p>\n

Abra\u00e7os,<\/p>\n

Cleuber<\/p>\n","protected":false},"excerpt":{"rendered":"

Introdu\u00e7\u00e3o O Cron \u00e9 um programa que roda em\u00a0sistemas Unix e GNU\/Linux, e este programa pode executar comandos e programas de acordo com uma agenda determinada. Ou seja, o Cron \u00e9 um agendador de tarefas do sistema operacional. Esta agenda pode ser configurada dentro do arquivo de tabela \u201c\/etc\/crontab\u201d, e tamb\u00e9m pode estar em um …<\/p>\n","protected":false},"author":1,"featured_media":3598,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[51,4,348],"tags":[495,508],"class_list":["post-3597","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dicas-e-tutoriais","category-tutoriais-linux","category-servidores-linux","tag-cron","tag-script"],"_links":{"self":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts\/3597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=3597"}],"version-history":[{"count":0,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/posts\/3597\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/media\/3598"}],"wp:attachment":[{"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=3597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=3597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cleuber.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=3597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}