the_superman Postado Dezembro 10, 2021 Compartilhar Postado Dezembro 10, 2021 (editado) Estou adaptando um pequeno script para: 1. Procurar por todos os arquivos de ERROR_LOG na pasta "/home" de todos os usuários. 2. Deixar APENAS as últimas 100 linhas neste arquivo, ou seja, um arquivo de 2GB de logs será incrivelmente reduzido pois só ficarão as últimas 100 linhas. find /home -type f -iname error_log -exec tail -n 100 {} > {} \; No entanto ele não está funcionando pelo que li a respeito por dois motivos: 1. O Linux resolve redirecionamentos antes de executar comandos, ou seja, quando ele tenta resolver o segundo "{}" é retornado um arquivo vazio. 2. Não é possível usar -exec com múltiplos {} no find facilmente. Como eu poderia consertar este script? Editado Dezembro 10, 2021 por the_superman 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
pluginscpanelwhm Postado Dezembro 10, 2021 Compartilhar Postado Dezembro 10, 2021 Olá, O arquivo error_log só existe pra um motivo, informar o usuario de que algo na programação do seu script contem algum erro. Se o arquivo error_log está ficando com tamanho grande, o usuario deve abrir o arquivo e verificar a causa dos erros, para então fazer a correção. Senão fizer essa correção o arquivo vai ficar crescendo infinitamente, senão souber como corrigir ou não quiser, não tiver tempo, enfim por qualquer outro motivo, pode ser feita uma gambiarra. Sendo o script em php coloque esse esqueminha na conta que contem o arquivo error_log com tamanho grande array_map('unlink', glob("error_log")); Isso vai remover o arquivo error_log toda vez que esse arquivo .php for acessado. Eu geralmente por preguiça mesmo coloco isso em paineis que usam o arquivo que verifica a sessão, mas senão for painel você pode colocar em um arquivo .php que for mais acesso, por exemplo o index.php. Ou criar um cron com arquivo .php e rodar em um determinado período. Outra alternativa seria fazer um shell script pra remover o arquivo error_log de todas as contas. Ou verificar o arquivo error_log que contem conteúdo pra você saber que essa conta tem algum erro na programação do script. Seria 2 palitos pra fazer isso, porem teria que rodar algumas vezes ao dia e não sei se seria legal dependendo da config do servidor. Sobre o find seria quase o mesmo que fazer um script e poderia consumir um pouco find /home -iname "error_log" -exec rm -fr {} \; Esse comando vai percorrer toda a /home do servidor e remover qualquer arquivo error_log que encontrar. Com shell script ficaria algo muito melhor de se fazer, pois poderia ser percorrida somente a home dos usuarios, não sendo percorrido outros diretorios que tiver na /home do servidor em si. 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
the_superman Postado Dezembro 10, 2021 Autor Compartilhar Postado Dezembro 10, 2021 Interessante que a despeito do título do tópico @pluginscpanelwhm, esse seu exemplo demonstra bem a diferença entre fazer algo de forma eficaz e eficiente. Remover os arquivos de ERROR_LOG, considerando que os mesmos serão criados novamente depois é eficaz mas não é eficiente pois terá casos em que o usuário poderá ter o azar de está procurando os arquivos de erros e eles serem excluídos logo em seguida. Embora imagine que provavelmente essa situação nunca tenha ocorrido com você. Por outro lado, deixando as últimas 100 linhas isso pode ajudar no DEBUG de uma aplicação que esteja apresentando problemas de formas constantes, pois nem sempre o erro é o mesmo. Tome o exemplo de uma exceção gerada por uma regra do ModSecurity por exemplo que só é acionada em caso de eventos específicos que considerando o fato que ocorram a cada X tempo, cria-se um intervalo de tempo onde esse erro poderá ficar invisível para o usuário. Essa questão do PHP não vou mexer. Acho interessante fazer só com o bom e velho find mesmo. Considerando os objetivos que citei na minha postagem, tem sugestão de como poderia corrigir este comando para alcançar o objetivo desejado? Ah propósito, para melhorar a legibilidade seu comando poderia ser escrito assim também: find /home -iname "error_log" -delete Embora isso seja só questão de gosto mesmo. O resultado é o mesmo. 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
pluginscpanelwhm Postado Dezembro 10, 2021 Compartilhar Postado Dezembro 10, 2021 (editado) Olá, Existem diversas formas de programar e de se chegar ao objetivo. Eu vejo que você quer fazer em uma linha o que precisa de mais de uma linha. Segue o script que acredito que faz o que você precisa, o script salva o conteudo do arquivo error_log para um .txt temporário e depois pega esse .txt temporário e salva no arquivo error_log original somente as 100 ultimas linhas. Desse modo os usuarios vão ter o arquivo error_log somente com as 100 ultimas linhas. pega-logs.sh Envie o arquivo pega-logs.sh para /bin e dê permissão nele #!/bin/bash SHELL=/bin/sh PATH=/sbin:/usr/sbin:/usr/bin:/bin # salva em um arquivo .txt todos usuarios do servidor cat /etc/trueuserowners | cut -d: -f1 | sort | uniq | awk -F " " '{print "US " $1 }' >/tmp/lista-usuarios.txt # loop com while lendo a lista de usuarios cat /tmp/lista-usuarios.txt |sed -r 's/(US)//g'| while read US do VERIFICA=$( cat /home/$US/public_html/error_log | wc -l) if [ "$VERIFICA" -gt "0" ]; then echo -e "" # salva o conteudo do arquivo error_log em um error_log.txt cat /home/$US/public_html/error_log >/home/$US/public_html/error_log.txt # inverte salvando as ultimas 100 linhas do arquivo error_log.txt para o arquivo error_log original cat /home/$US/public_html/error_log.txt | sed -e :a -e '$q;N;100,$D;ba' >/home/$US/public_html/error_log # remove o arquivo error_log.txt ( fica a seu criterio remove-lo ou criar uma pasta no servidor para salvar os logs) rm -rf /home/$US/public_html/error_log.txt else echo -e "" fi done OBS: Força do hábito, fiz o script para cPanel, se você utiliza outro painel, terá que modificar a primeira parte do script onde pega os usuarios do servidor. Editado Dezembro 10, 2021 por pluginscpanelwhm esqueci de informar que o script foi feito para cPanel 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.