cron, crontab, crond. Agendar tarefas.

Atualizado em: 07/10/2006



Sobre este documento

Comandos e dicas para agendar execução de programas e scripts.

Os comandos e dicas podem não atender as suas necessidades, não ser compatível com sua instalação, use como referencia, tente adaptar ao seu ambiente.

instalar e conferir status

O daemon do agendador de tarefas cron é o crond, ele faz a verificação das tarefas agendadas, portanto precisa dele rodando para executar as tarefas.

Na maioria das distro e perfis de instalação, o agendador de tarefa é instalado automaticamente, também é configurado na instalação para iniciar junto com o boot. Caso selecionou perfil de instalação que não inclua o pacote, este pode ser instalado a qualquer momento, procure no seu gerenciador de pacotes por; cron, crond, vixie-cron, crontabs e outros termos semelhantes a cron.

Depois de instalar confira se o serviço está rodando, este comando muda conforme a distro, no FAQ iniciar.txt tem diversas dicas sobre chkconfig, service e etc.., confira também nos tutoriais sobre as distro para descobrir o comando da sua distro, segue alguns exemplos.

SUSE 10.1 o daemon é cron

service cron status Quando está rodando retorna (running)

  Checking for Cron:                   running
  
  Verificar se está configurado para iniciar no boot
  
  chkconfig --list cron
  cron                      0:off  1:off  2:on   3:on   4:off  5:on   6:off

CL10 o daemon é crond

chkconfig crond on

Configura para iniciar o crond junto com o boot, no níveis 3 e 5, ou seja tanto para boot em modo texto como gráfico.

  [zago@faqcl9 zago]$ chkconfig --list crond
  crond           0:não   1:não   2:sim   3:sim   4:sim   5:sim   6:não

Conferir se está rodando, status.

service crond status

Quando OK retorna.

``crond (pid 1136) está rodando... ``

Ambiente gráfico

Agendador de tarefas em ambiente gráfico - KDE.

kcron = Agendador de Tarefas do KDE

Procure no menu do KDE por kcron, ou pelo atalho.

menu K -> executar comando, digite na caixa de comando: kcron

Ou ALT+F2 digite na caixa de comando: kcron

Ou na linha digite na linha de comando: kcron

Executar como root, gerenciar todas as tarefas agendas e agendar tarefas como root, no konsole torne root e digite: kcron

Funciona também via ssh, veja no FAQ sobre ssh, como executar aplicativos do X remotamente.

Instalar, procure "kcron" no seu gerenciador de pacotes.

Alarme = no KDE procure por "cron_alarm" mais sobre ele em:

http://www.kde-apps.org/

  cron_alarm
  A very simple script to play amarok from cron with a playlist. It will 
  start amarok if it is not started. It will also set the volume (default 65). 

Procure também "KAlarm"

webmin tem modulo para agendar tarefas. na aba "sistema" procure pelo ícone "Comandos Agendados" e "Tarefas Agendadas (Cron)".

Dica e FAQ sobre webmin, como acessar remotamente e outras dicas em:
http://www.zago.eti.br/webmin.txt

at - agendar um único evento

Agendar para um único evento, formato do comando:

at [opção] [comando/arquivo] [tempo]

SUSE 10.1 precisa iniciar o daemon atd com o comando.

rcatd start

Exemplos de comando no CL10

exemplo; desligar o micro às 18:08

  [root@faqcl10 root]# at 18:08
  at> halt -p
  at> <EOT>
  warning: commands will be executed using /bin/sh
  job 1 at 2004-07-31 18:08
  
  Ou 
  
  
  
  Ou
  [root@faqcl10 etc]# man at
  
  [root@faq188 etc]# at now+2minutes
  at> mozilla
  at>
  [1]+  Stopped                 at now+2minutes

Use CTRL+Z encerra entradas de comandos e salva.

No exemplo acima precisa digitar todos os dados, comandos complexos ou que se repetem eventualmente, fica mais pratico colocar todos os comandos em script e executar com a opção -f como neste exemplo.

at -f seuscript.sh 22:30

Quando for somente um comando como executar o mozilla daqui a 20 minutos.

at -f /usr/bin/mozilla now+20minutes

Ou se preferir, crie um arquivo com caminho do mozilla, por exemplo:

cat atmozilla

  /usr/bin/mozilla

Executar daqui a 20 minutos:

at -f atmozilla now+20minutes

ou se preferir definir a hora, por exemplo às 12:22:

at -f atmozilla 12:22

  zago@faqcl10 zago]$ at -f atmozilla 12:22
  warning: commands will be executed using /bin/sh
  job 1 at 2004-09-27 12:22

atq lista as tarefas agendadas pelo at e o numero do job atrm para excluir do agendamento, use atrm mais o numero do job listado no comando atq

Excluir usuários de usar o AT, configure em:

/etc/at.deny

echo "wget url" | at 05:13

veja também:

man at

         at,  batch, atq, atrm - agenda, examina ou exclui tarefas para execução
         posterior

Do man no CL10

         at      executa os comandos em um determinado momento.
  
         atq     lista as tarefas pendentes do usuário, exceto quando o  usuário
                 é  o  superusuário; neste caso, as tarefas de todos os usuários
                 são listadas.
  
         atrm    exclui tarefas.

Executar o script teste.sh daqui a 3 minutos.

at -f teste.sh now+3minute

  [root@faqcl10 root]# at -f teste.sh now+3minute
  warning: commands will be executed using /bin/sh
  job 1 at 2005-06-13 01:51

Ver o que tem cadastrado, execute "atq" que retorna o numero do PID, data e hora que será executado, exemplo:

  [root@faqcl10 root]# atq
  1       2005-06-13 01:51 a

Cancelar processos agendados, pegue o numero do PID que retornou no comando "atq" e execute atrm mais no numero do PID, exemplo:

atrm 1

Faça testes e combine com as opções indicadas no manual.

watch

watch executa um programa repetidamente com a periodicidade informada, veja mais sobre ele no man:

man watch

sleep e usleep

sleep - espera por uma quantidade de tempo especificada

Por default sleep conta o tempo informado em segundos.

sleep 90

provoca uma espera de 90 segundos.

sleep 300

O comando acima espera por 300 segundos, tem o mesmo tempo de 5 minutos igual o comando abaixo.

sleep 5m

Faça testes; use o tempo mais uma destas opções, s=segundos, m=minutos, h=horas e d=dias

esperar 5 minutos ou 5 horas.

  sleep 5m
  sleep 5h

Exemplo de um script com espera 3 segundos para executar novamente o comando smbstatus.

  #!/bin/sh
  while true;
  do
    clear
    smbstatus -S
    sleep 3
  done

CTRL+C encerra o script, altere os comandos do script e tempo do de atualização conforme sua aplicação.

Depurar script, acrescente depois da linha que deseja provocar uma parada para ler a mensagem.

sleep faz parte do pacote coreutils

página do manual;

info sleep

man sleep

usleep

usleep - espera por microsegundos especificado.

usleep - sleep for the specified number of microseconds

man usleep

usleep vem no pacote sysvinit (SUSE)

usuário comum agendando tarefas

Neste exemplo, usuário zago agendar para executar script /home/zago/copiaz, todos os dias às 20 horas

script a ser executado:

  [zago@faqcl9 zago]$ cat copiaz
  #!/bin/bash
  cd /home/zago
  /bin/tar -zcvf sambaz-`date +%d%m%y`.tar.gz  /home/zago/samba

Com o script já testado e tudo Ok, em um terminal como usuário zago, os comandos são:

crontab -e

pressione a tecla INSERT e digite esta linha:

  * 20 * * * * /home/zago/copiaz

pressione a tecla ESCAPE depois SHIFT : depois wq pra salvar e sair

prontinho, todos os dias as 20 horas será feito o backup.

Testar script

Tente usar ambiente de teste ou altere os comandos quando for o caso de acessar banco de dados ou informações importantes.

Agende para períodos curtos, inicie com uma tarefa simples, a cada 2 ou 3 minutos.

Assim facilita a depuração e verificação dos resultados.

Usando o script acima como teste, alterei o diretório de backup para pegar outro com poucos arquivos, agendar para ser executado a cada dois minutos, use este exemplo:

  */2 * * * * /home/zago/copiaz

Acompanhe com ls -la, veja o resultado:

  [zago@faqcl9 zago]$ ls -la
  -----corte----
  drwx------    3 zago     zago         4096 Jun 14 14:03 Desktop
  -rwxrwxr-x    1 zago     zago           89 Jun 15 08:26 copiaz
  drwxrwxr-x    2 zago     zago         4096 Jun 15 08:21 samba
  -rw-r--r--    1 zago     zago       580331 Jun 15 08:40 sambaz-150604.tar.gz
  drwx------    2 zago     zago         4096 Mai 30 02:28 tmp

apague o arquivo criado pelo script e aguarde 3 minutos para ver se ele cria novamente, vai dando ls e apagando o arquivo com rm, assim você faz a verificação do funcionamento do script, depois acerte para o horario desejado.

scripts e programas - agendar

== Dicas, comandos e depurando script =

Alterar ou acrescentar uma tarefa, edite o crontab com:

crontab -e

Abre o arquivo de configuração com o vi, pressione INS para entrar no modo edição e para sair pressione ESC depois SHFT: depois wq

Caso se arrependa ou queira sair sem salvar, pressione ESC depois SHFT: depois q!

Não precisa reiniciar o serviço, mas precisa do crond rodando.

Para exibir a tabela do cron (ver o que está agendado) digite:

crontab -l

ou

cat /etc/crontab

Cada tabela do cron pertence ao usuário que a criou, somente o root pode ver o que está agendado para outros usuários, execute:

crontab -u < usuário > -l

crontab -u zago -l

Quando falhar a execução de script ou comando, redirecione as mensagens de erro para arquivo, acrescente no final da linha de comando "2>/tmp/crond.log", por exemplo, para a tarefa agendada:

17-23 * * * * /home/anderson/geraiso.sh

Altere para este formato para salvar as mensagens em /tmp/crond.log:

17-23 * * * * /home/anderson/geraiso.sh 2>/tmp/crond.log

Ou salve em outro local, exemplo para salvar no home do usuário zago:

17-23 * * * * /home/anderson/geraiso.sh 2>/home/zago/crond.log

Depois da hora agendada, consulte o arquivo crond.log para ver o motivo do erro.

Permissão:

Quando não criar o arquivo de log, ajuste a permissão do script para 755

chmod 755 nome-do-script

Se ainda falhar, execute o agendamento como root, alguns aplicativos requer poderes de root e permissão 755, como exemplo gravar CD / DVD e muitos outros.

Quando funcionar com root e falhar com user comum, configure o sudo para dar permissão ao usuário executar com poderes de root.

Também tente outras opções no formato da data e hora, tem vasta documentação indicando este formato:

* * * * * * /caminho/aplicativos/comandos

10 20 * * * * /caminho/aplicativos/comandos

Quando falhar, em lugar de espaço como separador entre minutos e hora, utilize (-) ou (,), exemplo:

10-20 * * * * /caminho/aplicativos/comandos

10,20 * * * * /caminho/aplicativos/comandos

Em scripts pode inserir uma linha de criação do arquivo, ou intercalar linhas de comando para acrescentar alguma mensagem em arquivo, pode salvar algum resultado, conteúdo de variável ou mensagem, salvar em arquivo ajuda depurar problemas, depois de executar o script verifique o que foi salvo. Comparar com o que era esperado, por exemplo as linhas abaixo que iniciam com echo servem para este propósito, altere a mensagem que está entre aspas nas linhas que iniciam com echo conforme exemplo:

    #!/bin/bash
    # seus comandos...
    echo "teste das 20 horas" > /tmp/teste20
    #Pode inserir varias linhas no script:
    #seus comandos...
    echo "teste das 20 horas OK na linha 2" >> /tmp/teste20
    #mais comandos...
    ls -la  >> /tmp/teste20
    # mais comandos
    echo "teste das 20 horas OK na linha 6" >> /tmp/teste20

Depois de executar o script, edite o arquivo /tmp/teste20, encontrando as mensagens é sinal que funciona. Mudando a linha de comando e falhar, então pode ser problema de caminho do executável, permissão e outros problemas não relacionados ao script, nestes casos use testes de execução do comando.

programas para desligar todos os dias às 22:00 horas, no console do root execute whereis poweroff para descobrir o caminho e acrescentar no crontab (crontab -e), exemplo para CL e SUSE.

SUSE 10

10,22 * * * * /sbin/poweroff

Conectiva 10

10,22 * * * * /usr/bin/poweroff

Caso já tenha alguma tarefa agendada, basta acrescentar, copia de uma maquina com agendamento do fetchmail e para desligar.

  */5 * * * * /usr/bin/fetchmail -a
  10,22 * * * * /usr/bin/poweroff

ESC :wq

Cuidado com a opção com (*) em lugar dos minutos, (*22) vale para qualquer minuto entre 22 e 23 horas, assim não vai conseguir religar a maquina antes das das 23 horas, neste periodo a maquina desliga logo após o boot porque executa o crontab, a hora coincide e vale para qualquer minuto da hora. com poweroff a melhor solução é definir hora e minuto.

Períodos e intervalos do agendamento.

Agendar para executar script periodicamente, tem opções por hora, dia, semana, mês ou ano.

Não confundir com agendamento no crontab onde define a execução de um comando com crontab -e, este comando pode ser a chamada de script ou aplicativo.

Também podemos elaborar script para as mais variadas tarefas como backup, download, upload, gerar relatórios e outra tarefas com repetição periódica.

Pode agendar estas tarefas no crontab ou copiar para dentro de um destes diretórios.

  /etc/
  
  cron.d
  cron.daily
  cron.hourly
  cron.monthly
  cron.weekly

Requer o daemon do cron rodando e reiniciar o serviço depois da copia do script no diretório, o comando muda conforme a distro, no SUSE 10 use (rccron restart), no CL (service cron restart), execute o equivalente em sua instalação. Somente isto, não precisa editar nem configurar nada no crontab, a não ser que deseja alterar a configuração dele, não precisa executar o crontab, basta copiar o script para dentro do diretório desejado que o mesmo será automaticamente executado conforme o horario do crontab.

Para remover do agendamento, remova o script do diretório.

Resumindo, o cron executa tudo que tá lá dentro dos diretórios /etc/cron.

Dentro do script pode incluir rotinas de teste de condição, incluindo teste de quando deve ser executado, veja neste documento o exemplo sobre bittorrent, o script fica no diretório cron.hourly, portanto sendo executado de hora em hora, dentro do script tem um if que permite iniciar as 19 horas e outro que mata o processo às 7 horas, são tarefas que pode agendar no crontab ou até mesmo dentro do script.

Normalmente estes diretórios estão dentro do /etc, como exemplo no SUSE 10, CL9 e 10.

Estes diretórios tem perido pré-definido, observe o nome do diretório, como exemplo o cron.daily executa diariamente os scripts dentro deste diretório.

"diario" daily, "horario" hourly, "mensal" monthly e "semanal" weekly.

A definição do momento (hora e minuto) estão no arquivo /etc/crontab, tem definição de horario diferente conforme a distro e versão, além de consultar o arquivo para ver a configuração, faça testes com um script simples para salvar a data em arquivo, algo como.

  #!/bin/bash
  # seus comandos...
    echo `date` >> /tmp/testescript.txt
    echo "teste do script por hora" >> /tmp/testescript.txt

Ajuste a mensagem, torne executável (chmod 755 nomescript.sh), salve dentro do diretório correspondente ao agendamento desejado, depois do momento esperado para executar, consulte o arquivo /tmp/testescript.txt para ver a data e hora em que foi executado, isto não causa dano ao sistema, serve somente como forma de testar o funcionamento de script, veja indicação sobre log de comandos no final deste documento.

Conteúdo de /etc/crontab no SUSE e CL:

  
  SUSE 10.1
  
  cat /etc/crontab
  SHELL=/bin/sh
  PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
  MAILTO=root
  #
  # check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
  #
  -*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
  
  Ainda não entendi este horario do SUSE, na minha instalação os scripts que
  estão em /etc/cron.hourly são executados aos 30 minutos de cada hora
  
  Conectiva 10
  
  cat /etc/crontab
  # /etc/crontab: system-wide crontab
  
  SHELL=/bin/bash
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  MAILTO=root
  HOME=/
  
  # run-parts
  01 * * * * root run-parts /etc/cron.hourly
  02 4 * * * root run-parts /etc/cron.daily
  22 4 * * 0 root run-parts /etc/cron.weekly
  42 4 1 * * root run-parts /etc/cron.monthly

Em resumo. O sistema executa todos os scripts que estão dentro destes diretórios, serão executados nos dias e horarios definidos em /etc/crontab, basta elaborar o script, tornar executavel, ajustar as permissões e colocar dentro do diretório desejado, horas e minutos podem ser ajustados, edite o /etc/crontab, use seu editor de texto preferido, "mc", "vi" ou outro qualquer para editar texto puro, faça as alterações, faça de modo que não dispare dois serviços ao mesmo tempo, procure programar tarefas para horarios de pouco uso, fora do horario de trabalho, pode incluir comandos no script para testes e desligar o servidor no final do backup e etc...

MAILTO=root

Esta linha no crontab serve para enviar avisos por e-mail, neste exemplo serão enviados para o root, configurar o crontab para não enviar estes e-mail basta trocar (MAILTO=root) por (MAILTO="")

cron.daily

todos os scripts que estão dentro deste sub-diretório serão executados automaticamente todos os dias a zero hora, ou seja com execução diaria, uma vez todo dia a meia noite.

cron.hourly

todos os scripts que estão dentro deste sub-diretório serão executados automaticamente todas as horas, ou seja na hora cheia, uma vez na virada da hora.

cron.monthly

todos os scripts que estão dentro deste sub-diretório serão executados automaticamente todos os meses a zero hora do primeiro dia do mes, ou seja com execução mensal, uma vez todo mês, na virada do mês.

cron.weekly

todos os scripts que estão dentro deste sub-diretório serão executados automaticamente todas as semanas a zero hora do primeiro dia da semana, ou seja com execução semanal, uma vez toda semana, na virada da semana.

Estes diretórios estão vazios, copie o script para dentro deles para serem executados, escolha o diretório conforme o periodo que deseja executar o script, os que devem ser executados de hora em hora vão para o sub-diretório /etc/cron.hourly, com execução diaria vão pra /etc/cron.daily e etc....

Cuidados especiais com scripts

Utilize nos comandos do script e no agendador, sempre o (path) caminho completo do aplicativo a ser executado, exemplo para o comando tar, use /bin/tar, também na linha de comando que inserir no cron use o caminho completo para o script, por exemplo, executar um script que está em /home/zago, use a linha: /home/zago/nome-do-script e não somente nome-do-script.

Muito cuidado com scripts, o comodismo pode cair no esquecimento e não atualizar o script de backup quando incluir novos serviços, diretórios ou usuários, monitore constantemente, teste e avalie o que está sendo feito.

Tenha os seguintes cuidados quando elaborar scripts para execução pelo cron.

Nestes scripts não pode conter comandos que requer interação com o usuário, tais como pedir senha para completar a conexão de um ftp, nestes casos deve ser colocado todas as instruções dentro do script de maneira que possa completar a conexão passando o login e senha.

Comandos que requer confirmação para execução, por exemplo, apagar arquivos, o rm pede confirmação, mas com o paramentro -rf não pede, então seria assim:

rm -rf <arquivo, diretório ou /caminho/o que deve apagar>

Não deve ter nenhum comando que peça confirmação ou qualquer interação com o usuário.

Fique atento às permissões, quando possível agende como root para executar o script, use o "sudo" para dar permissões de execução em programas que requer poderes de root na execução, acesso a diretórios de backup e etc....

Espaço em disco quando baixar arquivos, backup ..., comandos de parar serviços ou manipular arquivos em uso. Revise periodicamente scripts que requerem atualização, tais como backup de dados dos usuários, incluir novos usuários...

O cron limita a busca nos diretórios /bin e /usr/bin, portanto indique o caminho completo do programa ou script, ou melhor indique sempre, mesmo que estejam nestes diretórios.

veja mais sobre elaboração de scripts nos modelos e dicas em: http://www.zago.eti.br/script/A-menu-scripts.html

fetchmail a cada 5 minutos

Exemplo com fetchmail, executar a cada 5 minutos.

A agendador de tarefas (cron, crond) executa os comandos com os direitos e permissões do usuário que fez a entrada dos dados, como o fetchmail tem que ser executado como root, então o usuário root deve fazer este agendamento, em um terminal como root, execute:

crontab -e

este comando vai abrir o editor "vi", quando fizer a primeira entrada o arquivo está vazio, basta pressionar a tecla INSERT para entrar em modo edição e digitar a linha abaixo:

*/5 * * * * /usr/bin/fetchmail -a

depois pressione a tecla ESCAPE, depois a tecla SHIFT+: e depois wq pra gravar e sair :wq

OBS.

/5 como no exemplo acima indica o intervalo de execução, repetição do comando, /5 executa o comando ou script a cada 5 minutos, sem a "/" executara aos 5 minutos de cada hora, ou seja desta forma:

* 5 * * * * /usr/bin/fetchmail -a

executará uma única vez por hora aos 5 minutos de cada hora.

Alguns comandos úteis:

crontab -l Lista as tarefas agendadas

crontab -e Editar o agendador de tarefas, incluir, alterar ou remover entradas.

Evite colocar somente o nome do programa ou script, no exemplo acima foi colocado somente fetchmail, mas o correto é acrescentar o caminho completo, utilize o whereis pra localizar o aplicativo, por exemplo:

whereis fetchmail

  fetchmail: /usr/bin/fetchmail /usr/share/man/man1/fetchmail.1.gz

Neste caso a entrada no cron deveria ser assim:

*/5 * * * * /usr/bin/fetchmail -a

Quando não usa o caminho completo pra indicar onde está o aplicativo ou script, em algumas situações pode falhar e outras pode funcionar, evite usar configurações como esta.

*/5 * * * * fetchmail -a

sarg - executar diariamente às 22:10

Exemplo de como agendar para executar um script todos os dias às 22:10, neste exemplo foi utilizado o SARG - gerador de relatorios do Squid.

O script:

  [root@faqcl9 root]# cat /etc/cron.daily/sargrelat
  #!/bin/bash
  /usr/sbin/sarg -f /etc/sarg/sarg.conf -p
  cp /var/log/squid/access.log /var/log/squid/copia`date +%d%m%y`access.log
  echo "" > /var/log/squid/access.log
  #poweroff

Este script gera o relatorio, faz uma copia do log pra um arquivo com outro nome incluindo no nome do arquivo a data da copia, limpa o arquivo de log original e por ultimo desliga o micro (poweroff) quando descomentada a ultima linha.

Este script está no diretório /etc/cron.daily com o nome de sargrelat

  cd /etc/cron.daily
  vi sargrelat
     (pressione a tecla INSERT, copie e cole ou digite o script)
  #!/bin/bash
  /usr/sbin/sarg -f /etc/sarg/sarg.conf -p
  cp /var/log/squid/access.log /var/log/squid/copia`date +%d%m%y`access.log
  echo "" > /var/log/squid/access.log
  #poweroff

(salvar e sair, pressione a tecla ESCAPE, SHIFT:, wq )

torne o script executável:

chmod 755 sargrelat

Prontinho, agora é só aguardar o horario programado. Os scripts deste diretório, no CL9 E CL10 por default vem assim:

  cat /etc/crontab
  # /etc/crontab: system-wide crontab
  ---corta--
  02 4 * * * root run-parts /etc/cron.daily

Mantendo a configuração original o script será gerado todos os dias às 4:02, prefiro executar no próprio dia para manter a data do relatório com a mesma que foram gerados os logs, tem meios de ajustar isto, achei mais prático alterar a data no crontab para executar as 22:10, use seu editor preferido ou "vi" para editar o /etc/crontab e ajuste o horario, para o meu exemplo 22:10 ficou assim.

  cat /etc/crontab
  # /etc/crontab: system-wide crontab
  ---corta--
  10 22 * * * root run-parts /etc/cron.daily

Prontinho, gera automaticamente os relatorios diarios, claro que precisa manter o micro ligado para executar a tarefa. Com o micro desligado no horario programado o agendamento do dia é perdido, nova verficação vai ocorrer somente no horario do dia seguinte.

Caso queira executar alguma tarefa quando ligar o micro, use os script de inicialização, tem dicas e exemplos no FAQ iniciar.txt

/etc/cron.hourly com seleção da hora

script em /etc/cron.hourly são executados de hora em hora, podemos incluir rotinas com if para pular ou selecionar determinadas horas, executar comandos diferentes conforme a hora, como exemplo, rotina para iniiciar um processo as 18 horas e matar o mesmo as 08 horas.

  #!/bin/bash
  /sbin/pidof FAH504-Linux.exe
  STATUSFAH="$?"
  HATUAL=$(date +%H)
  if [ "$HATUAL" -eq "20" ]; then
     # iniciar processo se status for diferente de zero (ainda não está rodando)
    if [ "$STATUSFAH" != "0" ]; then
      cd /home/zago/tmp
      ./FAH504-Linux.exe &
    fi
  fi
  
    # sair sem matar o processo aos sabados ou domingos
  MNUMDIA=$(echo `date +%u`)
  if [ "$MNUMDIA" = "6" ]; then
   exit 1
  fi
  if [ "$MNUMDIA" = "7" ]; then
   exit 1
  fi
  if [ "$HATUAL" -eq "08" ]; then
    # matar processo se status for igual a zero (rodando)
    if [ "$STATUSFAH" = "0" ]; then
      /usr/bin/pkill FAH504-Linux.exe
      killall -9 FAH504-Linux.exe
      kill -9 $(ps ax|grep "FAH504"|awk '{print $1}')
    fi
  fi

Indicações

Páginas do manual (man, help) execute na linha de comando.

  man crontab
  man 1 crontab
  man 5 crontab
  man 8 cron

Outros FAQ relacionados a datas, boot e agendamento de tarefas (crontab).

Iniciar serviço junto com o boot do sistema, use o chkconfig, veja mais sobre ele no FAQ:
http://www.zago.eti.br/iniciar.txt

sobre data, hora certa, trabalhar com data em script, hora de verão, horario local e etc, FAQ com mensagens da Linux-br e indicações...
http://www.zago.eti.br/script/data.html
Dicas para encontrar erros em script.
http://www.zago.eti.br/script/log-de-comandos.html
Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html