cron.hourly job not running

1

SO: Ubuntu 16.04

Eu examinei muitos artigos e tópicos diferentes, e ainda não consigo que minhas tarefas cron.hourly sejam executadas automaticamente. Eu estou tentando executar um backup no meu banco de dados PostgreSQL. Em /etc/cron.hourly , tenho apenas um script chamado pg_backup . Aqui estão as permissões:

-rwxr-xr-x   1 root root  1543 Oct 16 19:07 pg_backup

Se eu executar run-parts --test /etc/cron.hourly , a saída será a seguinte:

/etc/cron.hourly//pg_backup

Isso parece bom. Se eu executar o script usando run-parts manualmente, ele funcionará como esperado e fará o backup do meu banco de dados. Aqui está o comando que estou usando:

run-parts -v --report /etc/cron.hourly

Isso é ótimo, mas por qualquer motivo, não está funcionando a cada hora por si só. Eu realmente não sei o que poderia estar errado. Eu verifiquei todos os registros e não consegui encontrar nenhuma mensagem de erro.

O que estou perdendo?

UPDATE

Notei que meu arquivo /etc/crontab tem o shell especificado da seguinte forma: SHELL=/bin/sh . Meu script é executado no bash. É suficiente ter a shebang no topo do meu script para usar o bash? #!/bin/bash

UPDATE 2

Como sugerido por Broco, eu coloquei o trabalho no meu crontab e ele ainda não está funcionando. Aqui está o que eu fiz:

sudo crontab -e

Em seguida, adicionei o seguinte ao arquivo:

* * * * * root /etc/cron.hourly/pg_backup

Eu fiz isso acontecer a cada minuto para obter um feedback mais rápido sobre se ele está ou não em execução e parece estar em execução, mas não está realmente realizando o backup.

Aqui está parte do meu syslog. Eu usei o comando grep CRON /var/log/syslog :

Oct 17 14:02:01 User CRON[63871]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:02:01 User CRON[63870]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:03:01 User CRON[63917]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:03:01 User CRON[63916]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:04:01 User CRON[63966]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:04:01 User CRON[63965]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:05:01 User CRON[64013]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:05:01 User CRON[64012]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:05:01 User CRON[64014]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 17 14:06:01 User CRON[64060]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:06:01 User CRON[64059]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:07:01 User CRON[64106]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:07:01 User CRON[64105]: (CRON) info (No MTA installed, discarding output)
    
por Alexander 17.10.2016 / 03:47

2 respostas

0

Seu trabalho cron está em execução, mas o trabalho está com um problema.

Você normalmente deve receber um e-mail com a saída (e erros!), mas não recebe e-mails porque:

Oct 17 14:02:01 User CRON[63870]: (CRON) info (No MTA installed, discarding output)

Você não tem nada instalado em seu sistema que seja capaz de enviar e-mails. Assim, a saída é jogada fora.

Considere a instalação de um MTA para que você possa enviar a saída por e-mail e descobrir o que realmente está acontecendo.

    
por 18.10.2016 / 00:22
0

Eu percebi isso! Como Michael Hampton apontou, meu trabalho estava funcionando, mas tinha alguns erros. Eu não tinha um MTA instalado, então instalei postfix com sudo apt-get install postfix . Depois de fazer isso, consegui ver o arquivo /var/mail/root para ver as mensagens de erro relacionadas aos meus cron jobs.

Meu principal problema acabou sendo relacionado a variáveis de ambiente ausentes. Como cron é executado em root , minhas variáveis de ambiente não foram definidas sempre que o script foi executado. Então, eu incluí meu .bashrc no topo do meu script assim:

source "$HOME/.bashrc"

Em root do usuário .bashrc , adicionei as variáveis de ambiente necessárias para o script. Isso ainda não funcionou; as variáveis de ambiente ainda não estavam sendo definidas quando o script foi executado. Para corrigir isso, adicionei ao meu script a seguinte linha antes da linha que inclui .bashrc :

export PS1="1"

Em este encadeamento , essa variável de ambiente impede que .bashrc seja carregado em sessões não interativas, portanto, quando for definido, .bashrc será carregado.

Muito obrigado pela ajuda, todo mundo!

    
por 18.10.2016 / 05:49

Tags