Ouvi dizer que o crontab é uma boa escolha, mas como escrevo a linha e onde a coloco no servidor?
Ouvi dizer que o crontab é uma boa escolha, mas como escrevo a linha e onde a coloco no servidor?
Respostas:
Aqui está um bom tutorial sobre o que é o crontab e como usá-lo no Ubuntu. Sua linha de crontab será mais ou menos assim:
00 00 * * * ruby path/to/your/script.rb
( 00 00
indica meia-noite - 0 minutos e 0 horas - e os *
significam todos os dias de cada mês.)
Sintaxe: comando mm hh dd mt wd mm minuto 0-59 hh hora 0-23 dd dia do mês 1-31 mt mês 1-12 wd dia da semana 0-7 (domingo = 0 ou 7) comando: o que você deseja executar todos os valores numéricos podem ser substituídos por *, o que significa que todos
/etc/crontab
(no Ubuntu), mas quando você executa, crontab -e
você está editando um crontab específico do usuário, que não permite esta coluna. O IIRC Ubuntu desencoraja a saída /etc/crontab
manual porque pode ser substituído. Veja aqui: stackoverflow.com/questions/8475694/…
sudo crotab -u root -e
na página do manual
linux$ man -S 5 crontab
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
...
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
...
É bom observar os "apelidos" especiais que podem ser usados (documentados na página de manual), particularmente o "@reboot", que não tem data e hora alternativas.
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
Você também pode usar esse truque para executar seu trabalho cron várias vezes por minuto.
# Run every minute at 0, 20, and 40 second intervals
* * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
Para adicionar um trabalho cron, você pode fazer uma de três coisas:
adicione um comando ao crontab de um usuário, como mostrado acima (e no crontab, seção 5, página de manual).
crontab -e -u <username>
crontab -e
EDITOR
variável de ambiente
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
crie um script / programa como um trabalho cron e adicione-o aos /etc/cron.*ly
diretórios anacron do sistema
chmod a+x /etc/cron.daily/script_runs_daily.sh
- torná-lo executávelman anacron
chmod a+x <file>
/etc/crontab
ou /etc/anacrontab
executados em um horário definido/etc/anacrontab
e definem cron.hourly em/etc/cron.d/0hourly
Ou, pode-se criar crontables do sistema /etc/cron.d
.
/etc/cron.d
não precisam ser executáveis.someuser
e o uso de /bin/bash
como o shell é forçado. File: /etc/cron.d/myapp-cron
# use /bin/bash to run commands, no matter what /etc/passwd says
SHELL=/bin/bash
# Execute a nightly (11:00pm) cron job to scrub application records
00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
Às vezes, você precisará especificar PATH e GEM_PATH usando o crontab com rvm.
Como isso:
# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global
# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
Guia rápido para configurar um trabalho cron
Crie um novo arquivo de texto, por exemplo: mycronjobs.txt
Para cada trabalho diário (00:00, 03:45), salve as linhas de programação em mycronjobs.txt
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
Envie as tarefas para o cron (sempre que você executa isso, o cron exclui o que foi armazenado e é atualizado com as novas informações em mycronjobs.txt )
crontab mycronjobs.txt
Informações Úteis Extra
Ver trabalhos cron atuais
crontab -l
Remova todos os trabalhos cron
crontab -r
Você pode executar o shell script de duas maneiras, usando a tarefa cron ou escrevendo um shell script
Vamos supor que o nome do seu script seja "herscript.sh"
Primeiro verifique a permissão do usuário do script. use o comando abaixo para verificar a permissão do usuário do script
ll script.sh
Se o script estiver na raiz, use o comando abaixo
sudo crontab -e
Segundo, se o script contiver o usuário "ubuntu", use o comando abaixo
crontab -e
Adicione a seguinte linha no seu crontab: -
55 23 * * * /path/to/yourscript.sh
Outra maneira de fazer isso é escrever um script e executá-lo no backgroud
Aqui está o script no qual você deve colocar o nome do script (por exemplo: - youscript.sh), que será executado às 23:55 todos os dias
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
salve-o em um arquivo (vamos chamá-lo de "todos os dias.sh")
sleep 1d - significa que aguarda um dia e depois roda novamente.
Agora, dê a permissão para o seu script.use abaixo do comando: -
chmod + x todos os dias.sh
agora, execute esse shell script em segundo plano usando "nohup". Isso continuará executando o script mesmo após o logout da sua sessão.
use o comando abaixo para executar o script.
nohup ./every-day.sh &
Nota: - para executar "YOURScript.sh" às 23:55 todos os dias, é necessário executar o script "every-day.sh" exatamente às 23:55.