Crontab não está funcionando ou erro de script?

1

Eu fiquei preso a este cronjob que simplesmente não funciona. Eu deixei por um dia para solucionar o problema novamente com alguma idéia nova, mas ainda sem sorte.

Eu tentei encontrar minha resposta nesta grande postagem , mas não tudo está claro para mim e, no final, ele ainda se recusa a trabalhar. E para piorar tudo, não há logs, nenhum erro para localizar o cron em / var / log.

O que eu tento conseguir?
Automatize a remoção de diretórios que são preenchidos por uma câmera IP. Nos diretórios estão os instantâneos. Aqui está uma visão da lista.

pi@raspberrypi:/media/pi/USB/Dahua/Dahua $ ll
total 24K
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  2 05:59 2018-09-02d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  3 00:57 2018-09-03d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  4 02:03 2018-09-04d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  5 01:20 2018-09-05d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  6 00:20 2018-09-06
-rw-r--r-- 1 xxxxxxxx xxxxxxxxx 4.0K Sep  6 22:28 DVRWorkDirectory

Eu gostaria de manter os x arquivos mais recentes e me livrar do resto. Tudo isso com um cronjob que seria executado, vamos dizer toda semana ou todo dia em um determinado horário.

Parece não ser difícil, mas eu simplesmente não consigo fazer funcionar. É verdade, meu conhecimento em Linux é básico e provavelmente será a causa do meu problema.

Etapa 1: meu script, as permissões e o local do arquivo.

Na minha pesquisa, descobri que esses três tópicos são importantes. Então, isso deve ser uma informação valiosa.

-rwxr--r-- 1 root staff 183 Sep  6 15:22 dahuapurge.sh

/usr/local/bin

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#
#
#Keep the Dahua pics for max x time.
cd /media/pi/USB/Dahua/Dahua/
sudo rm -rf 'ls -tl | tail -n +8'

Etapa 2: minha configuração do cronjob.

Para criar o cronjob, usei o comando crontab -e. No arquivo, toda linha é comentada, exceto minha regra escrita manualmente. Eu sei, eu configurei para funcionar a cada hora no momento.

# AUTHOR: - xxxx xxxx
# DATE:   - 31/08/2018
# DESCR:  - Purge Cam pics
# LINK: -
#
0 * * * * /usr/local/bin/dahuapurge.sh

UPDATE:
Eu poderia ter encontrado um dos meus erros ou talvez o erro. Mas eu estava muito longe do meu post, então eu compartilho mesmo assim.
Eu adicionei a opção -rf ao meu comando rm porque eu tento excluir diretórios e não arquivos. Eu modifiquei meu script e ele deve remover 1 diretório novamente em cerca de 30 minutos.

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#
#
#Keep the Dahua pics for max x time.
cd /media/pi/USB/Dahua/Dahua/
sudo rm -rf 'ls -tl | tail -n +7'

UPDATE:
Ainda não estou funcionando, mas vou tentar as sugestões de onde postou e atualizei este o mais cedo possível.

    
por maxim 06.09.2018 / 15:34

2 respostas

2

Coisas para verificar nesta ordem:

  1. Seu script é executado de forma não interativa a partir da linha de comando com o conjunto exato de proprietários?

    sudo -H -u user -- command
    
  2. A entrada do crontab está sintaticamente correta? Observe que o crontab em todo o sistema tem uma coluna adicional. Reinicie em vez de recarregar o serviço cron, então você deve receber uma mensagem de erro apropriada em /var/log/syslog se o crontab tiver um erro:

     Sep  6 15:56:50 myhost cron[834]: (CRON) STARTUP (fork ok)
     Sep  6 15:56:50 myhost cron[834]: Error: bad command; while reading /etc/crontab
     Sep  6 15:56:50 myhost cron[834]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
    

O crontab contém uma variável MAILTO apontando para um endereço de e-mail. Por esse meio, você pode depurar seu script. Sempre que um script gera algo para stdout ou stderr, seu conteúdo é enviado para esse endereço. Para este propósito, um MTA (agente de transporte de email) é necessário. Dê uma olhada aqui .

Para outra coisa: Passar a saída de ls para um comando é um antipadrão de projeto. Removendo arquivos nomeados *.jpg com mais de 5 dias (não recursivamente) assim:

find /path -maxdepth 1 -type f -name '*.jpg' -ctime +5 -delete

Para mais detalhes, consulte man 1 find .

    
por 06.09.2018 / 15:58
0

Em poucas palavras e, em seguida, as saídas dos comandos:

1 / Como aconselhado por várias pessoas parei de analisar ls. Especialmente quando usando com rm -rf e eu entendo porque agora. Eu tive que usar exec rm -rf , porque excluir não funciona com diretórios 'não' vazios.

2 / Criei minhas ações crontab -e na conta raiz (usando sudo su ).

3 / Alterei as permissões dos meus scripts (permissão para execução por outros grupos usando chmod 756 file ).

Permissões de arquivo:

root@raspberrypi:/usr/local/bin# ls -l
total 8
-rwxr-xr-- 1 root staff 146 Sep  7 10:13 dahuapurge.sh

Script:

#!/bin/bash
#
#
#Keep the most recent Dahua pics.
find /media/pi/USB/Dahua/Dahua/ -maxdepth 1 -type d -name '20*' -mtime +10 -exec rm -rf {} +

Últimas linhas do Crontab:

# AUTHOR: - xxxxx xxxx 
# DATE:   - 31/08/2018
# DESCR:  - Purge Cam pics
# LINK:   -
0 1 * * * /usr/local/bin/hikvisionpurge.sh
0 2 * * 2 /usr/local/bin/dahuapurge.sh


Nesse meio tempo, eu já criei outro para outra câmera e estou trabalhando muito bem.

    
por 07.09.2018 / 11:48