Apagar certos arquivos no cron

1

Como posso apagar regularmente certos arquivos no cron?

Estou tentando excluir arquivos vazios com mais de 15 minutos no diretório de sessões do PHP. Eu tentei vários métodos, todos falharam com mensagens de erro diferentes.

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | xargs -n 200 -r -0 rm

xargs não encontra 'rm'. Também não encontrará '/ bin / rm'.

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}'

Argumento ausente para a opção -exec.

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -delete
A opção

-delete é desconhecida, o find deve ser antigo.

O Ubuntu 16.04 ainda pode fazer isso? A primeira versão mencionada funcionou bem em 14.04. Talvez eu tenha que criar um arquivo de script de shell separado e simplesmente escrever seu nome na configuração do cron se é isso que o cron pode fazer. Todos os comandos acima funcionam bem em um shell bash interativo (talvez exceto o último). Apenas não no cron.

    
por ygoe 03.12.2016 / 17:15

1 resposta

0

Para evitar lidar com a sintaxe da linha de comando de cron , não coloque o comando no crontab . Escreva um wrapper bash simples em torno do comando e chame o script do crontab . Este wrapper permitirá que você configure o ambiente ( $PATH ), redirecionamento de E / S, tratamento de erros, ...

Além disso, observe que você está usando o formato crontab usado na configuração especial% root ( /etc/crontab , /etc/cron.d/ , /etc/cron.daily/ , /etc/cron.hourly/ , /etc/cron.monthly/ , /etc/cron.weekly/ ) . Esta é sua intenção? Ou você está usando sudo crontab ? Eu desaprovo isso.

Você tem:

[ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | xargs -n 200 -r -0 rm

Você precisa:

[ -d /var/lib/php/sessions ] && /usr/bin/find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | /usr/bin/xargs -n 200 -r -0 /bin/rm 

Você tem:

[ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}'  

Você precisa de um ponto e vírgula com escape (" \; ") para finalizar o -exec :

[ -d /var/lib/php/sessions ] && /usr/bin/find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}' \;  

" find deve ser antigo"? O find --version se parece com:

 $ find --version
find (GNU findutils) 4.7.0-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2) 

Qual versão do Ubuntu você está executando? find ... -delete existe há muito tempo. Você é BusyBox ?

Aqui está um script que eu uso para ilustrar alguns problemas de cron :

(Meu ambiente usa $HOME/bin e $HOME/var/log ):

Em $ HOME / bin / recordenv:

#!/bin/bash
# Record the environment that a job enjoys
# $1 is the "type" (cron, at, batch, gui, text) are suggested values.
# $1 is NOT validated. Output goes to ${HOME}/var/log/{env,set,alias}.$1
if [[ "$1" ]] ; then
    ext="$1"
    env | sort >${HOME}/var/log/env.$ext
    set        >${HOME}/var/log/set.$ext
    alias      >${HOME}/var/log/alias.$ext
    /bin/ls -l ${HOME}/var/log/env.$ext ${HOME}/var/log/set.$ext ${HOME}/var/log/alias.$ext
else
    echo "User error."
    exit 1
fi

Para usá-lo, chame $HOME/bin/recordenv cron de crontab .

    
por waltinator 03.12.2016 / 19:04