AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 742704
Accepted
TommyPeanuts
TommyPeanuts
Asked: 2015-12-14 01:05:36 +0800 CST2015-12-14 01:05:36 +0800 CST 2015-12-14 01:05:36 +0800 CST

find -delete funciona bem, mas não com o cron

  • 772

ATENÇÃO : Eu li todas as perguntas semelhantes re. cron, paths, env variables e assim por diante, mas não encontrei nenhum que oferecesse soluções para meu problema específico.


Eu tenho um script que faz alguns despejos do MySQL e depois exclui os antigos como este:

/usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -delete

( o comando acima foi modificado do meu comando original por sugestões de comentários )

No entanto, os arquivos nunca são excluídos quando o cron executa esse script. O usuário cron é root.

Notas de depuração

  • Se eu executar manualmente o script no qual o comando aparece, ele os exclui conforme o esperado.

  • Se eu executar o comando find acima sozinho na linha de comando como root, ele os excluirá conforme o esperado (e com -print retornará uma lista de arquivos com mais de 5 dias conforme o esperado)

  • Também adicionei uma instrução de caminho explícito ao crontab do root, mas
    isso não muda nada.

  • Cron não envia nenhum erro e, se eu canalizar a operação de localização para um arquivo de log,
    ele ficará vazio ou não será criado.

  • Estou usando o servidor Ubuntu 14.04.03 LTS.

cron
  • 4 4 respostas
  • 14179 Views

4 respostas

  • Voted
  1. Will
    2015-12-14T22:13:03+08:002015-12-14T22:13:03+08:00

    O problema é que crontabnão tem $PATHdefinido quando é executado. Na verdade, você pode fornecer um caminho adicionando-o ao topo do arquivo aberto por meio de crontab -e:

    PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    

    (ou o que PATHvocê preferir usar). Isso significa que você pode evitar especificar os caminhos completos para os comandos, diretamente do cron.

    Existem vários problemas com seu comando original. Você está basicamente pedindo ao shell para fazer a expansão curinga, em vez de find. Em segundo lugar, você não está fornecendo um caminho completo para rm; use /bin/rmou /usr/bin/rm, onde quer que esteja localizado em seu sistema (consulte which rm).

    O primeiro argumento para localizar é o "local de pesquisa" e, em seguida, você especifica a "consulta de pesquisa" com os vários -<option>s. Portanto, o formato adequado do comando que você deseja executar é:

    find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -exec rm -f {} \;
    

    ou

    find "/home/bkp/dbdump" -name "*.gz" -mtime +5 delete
    

    Se você não especificar a PATHdefinição como acima, use:

    /usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -exec /bin/rm -f {} \;
    

    ou

    /usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 delete
    
    • 6
  2. shad0VV
    2015-12-14T01:13:14+08:002015-12-14T01:13:14+08:00

    Tente isso em vez disso

    find /home/bkp/dbdump -type f -name '*.gz' -mtime +5 -delete
    
    • 3
  3. Best Answer
    TommyPeanuts
    2015-12-24T01:37:27+08:002015-12-24T01:37:27+08:00

    Se eu chamar o comando find diretamente do crontab do root e não como parte do script, ele funcionará.

    O script em questão usa csh. Acredito que o ambiente cron do root no Ubuntu estará usando /bin/bash (ou /bin/dash?). Talvez isso entre em conflito de alguma forma com a forma como o comando find estava sendo executado.

    De qualquer forma, o problema principal foi resolvido, embora um tanto deselegante.

    • 0
  4. linux.cnf
    2020-09-28T09:10:49+08:002020-09-28T09:10:49+08:00

    Caro Crontab usa shell sh em vez de bash por padrão. você pode usar /dev/null para esvaziar arquivos. verifique o script abaixo. isso vai ajudar.

    #!/bin/bash
    tar=$(ls -lt /backup/manual | grep ^d | tail -n1 | awk '{print $NF}')
    for i in $(find /backup/manual/"$tar" -type f ) 
     do cat /dev/null > "$i" 
    done > /dev/null 2>&1 && mv /backup/manual/"$tar" /tmp/
    

    explicação: por favor, use o loop for para acessar todos os arquivos das pastas de destino e torná-los nulos e mover para o diretório / tmp por último

    • -2

relate perguntas

  • Qual é a sintaxe correta para executar o cron a cada 4 horas? [duplicado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve