Eu vejo dois problemas:
-
Você está executando coisas que precisam de privilégios de root, mas estão sendo executadas como um usuário comum.
-
Você está usando nomes de comandos sem o PATH completo e, portanto, a sessão aberta pelo cron não sabe onde encontrá-los.
Para corrigir 1., não use crontab -e
e, em vez disso, edite /etc/crontab
ou, ainda mais simples, execute sudo crontab -e
para adicioná-lo ao crontab do root. Em seguida, edite seu dropdb.sh
e remova o su
(o script agora será iniciado pelo root, portanto, não há necessidade de su
).
Para corrigir 2, a abordagem mais simples seria definir o PATH no crontab. Deve ficar assim:
PATH=/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin
# m h dom mon dow command
12 2 * * * ./home/postgres/stop_services.sh
17 2 * * * ./home/postgres/dropdb.sh
55 5 * * * ./home/postgres/start_services.sh
Como alternativa, edite seus scripts e verifique se todos eles usam caminhos absolutos (portanto, /usr/sbin/service
em vez de service
).