1
resposta

[Dúvida] crontab nao executa o trabalho retoricamente

GNU nano 6.2                     exercicio4.sh                               
#! /bin/bash

# verificar os 15 processos que consomem mais memoria a cada 5 min
#salvar o processo em um arquivos de saida

# pasta onde sera salva os  processos
pasta='exercicio_4'

if [ ! -d "$(pwd)/$pasta" ]; then
        mkdir "$pasta"
        echo "Pasta\" $pasta\" criada com sucesso!"
else
        echo "Pasta\"$pasta\"já existe"
fi
cd "$pasta"


timestamp=$(date +"%Y%m%d%H%M%S")
ps aux --sort=-%mem | head -n 16 > "top_processes_$timestamp.txt"

echo "Script executado em $(date)" >> log.txt
cat log.txt

no cronlab -e

* * * * * /home/matheus/Documentos/BASH/exercicio4.sh

só ocorre um processo

1 resposta

Olá, Matheus! Parece que você está tendo problemas para executar seu script através do crontab, correto? Vamos tentar resolver isso juntos.

Primeiramente, verifique se o caminho absoluto para o script está correto. No seu caso, é /home/matheus/Documentos/BASH/exercicio4.sh. Verifique se o arquivo exercicio4.sh realmente existe neste local.

Em segundo lugar, certifique-se de que o script tem permissões de execução. Você pode verificar isso com o comando ls -l /home/matheus/Documentos/BASH/exercicio4.sh. Se o arquivo não tiver permissão de execução, você pode adicioná-la com o comando chmod +x /home/matheus/Documentos/BASH/exercicio4.sh.

Além disso, os scripts executados pelo cron executam em um ambiente diferente do seu shell de login, o que significa que eles podem não ter acesso a todas as variáveis de ambiente e caminhos que você tem em sua sessão de terminal. Portanto, é uma boa prática usar caminhos absolutos em seus scripts. No seu script, você está usando $(pwd) para obter o diretório atual, mas isso pode não funcionar como esperado quando o script é executado pelo cron.

Experimente substituir $(pwd) pelo caminho absoluto do diretório onde você deseja criar a pasta 'exercicio_4'. Por exemplo:

pasta='/home/matheus/Documentos/BASH/exercicio_4'

Por último, para verificar se o cron está realmente executando o seu script, você pode redirecionar a saída padrão (stdout) e a saída de erro (stderr) para um arquivo de log. Adicione >> /home/matheus/Documentos/BASH/cron.log 2>&1 ao final da linha do crontab. Isso irá registrar qualquer saída ou erro do seu script no arquivo cron.log.

A linha no crontab ficaria assim:

* * * * * /home/matheus/Documentos/BASH/exercicio4.sh >> /home/matheus/Documentos/BASH/cron.log 2>&1

Espero que essas sugestões possam te ajudar a solucionar o problema. Lembre-se, a prática leva à perfeição, então continue tentando! Espero ter ajudado e bons estudos!