Intereting Posts
Xorg не загружается при запуске Может ли GDB декодировать ядро, если он был передан по трубопроводу? русские буквы в консоли gentoo как '?' Не удалось скомпилировать Linux Kernel 4.7-rc2 Довольно отображение «ip route» Исполняемая символическая ссылка приводит к «команде не найденной», Вино не может имитировать перезагрузку системы после конфигурации Microsoft Office Dotfile не работает в текущей оболочке, нужен новый Почему эти два варианта команд, которые похожи, дают разные результаты? Схват первых символов для строки из трубы Почему нет API-интерфейса Unix? Как использовать команду grep для поиска всех URL-адресов в файле базы данных, кроме гиперссылок и http://www.example.com, и сохранить их в другом файле Цепочка IPTABLES нужна помощь для ограничения Запуск скрипта через bashrc вызывает вложенность панелей tmux Гармонический шрифт на tty1 (но не tty2-6) после загрузки

Crontab не работает или ошибка скрипта?

Я застрял с этим cronjob, который просто не работает. Я оставил это на один день, чтобы снова разобраться с некоторыми новыми идеями, но все еще не повезло.

Я попытался найти ответ на этот великий пост , но мне не все ясно, и в конце концов он все равно отказывается работать. И, что еще хуже, нет никаких логов и ошибок, которые можно найти относительно cron в / var / log.

Чего я пытаюсь достичь?
Автоматизируйте удаление каталогов, которые заполнены IP-камерой. В каталогах есть снимки. Вот вид на список.

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 

Я хотел бы сохранить x новейших файлов и избавиться от остальных. Все это с помощью cronjob, который запускается, скажем, каждую неделю или каждый день в определенное время.

Кажется, это не сложно, но я просто не могу заставить это работать. Это правда, мои знания Linux являются базовыми и, вероятно, будут причиной моей проблемы.


Шаг 1: Мой скрипт, права доступа и местоположение файла.

В своем исследовании я обнаружил, что эти три темы важны. Так что это должна быть ценная информация.

 -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` 

Шаг 2: Мой конфиг cronjob.

Для создания cronjob я использовал команду crontab -e. В файле каждая строка комментируется, кроме моего написанного вручную правила. Я знаю, я настроил его запускать каждый час на данный момент.

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

ОБНОВИТЬ:
Я мог найти одну из моих ошибок или, возможно, ошибку. Но я был довольно далеко со своим постом, поэтому я все равно поделился им.
Я добавил опцию -rf в свою команду rm, потому что я пытаюсь удалить каталоги, а не файлы. Я изменил свой скрипт, и он должен снова удалить 1 каталог примерно через 30 минут.

 #!/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` 

ОБНОВИТЬ:
Все еще не работает, но я попробую предложения, которые были размещены и обновлять как можно скорее.

Вещи, чтобы проверить в этом порядке:

  1. Ваш сценарий выполняется не в интерактивном режиме из командной строки с указанием точного владельца?

     sudo -H -u user -- command 
  2. Является ли запись в crontab синтаксически правильной? Обратите внимание, что общесистемный crontab имеет еще один столбец. Перезапустите вместо перезагрузки службы cron, затем вы должны получить соответствующее сообщение об ошибке в /var/log/syslog если crontab имеет ошибку:

      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) 

В crontab содержится переменная MAILTO указывающая на почтовый адрес. Таким образом, вы можете отлаживать ваш скрипт. Всякий раз, когда скрипт выводит что-то в stdout или stderr, его содержимое отправляется по этому адресу. Для этого необходим MTA (почтовый транспортный агент). Посмотрите здесь .


К другому: передача вывода команды ls – это анти-шаблон проектирования. Удаление файлов с именем *.jpg старше 5 дней (не рекурсивно), например:

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

Для более подробной информации смотрите man 1 find .

В двух словах, а затем вывод команд:

1 / Как посоветовали несколько человек, я перестал разбирать ls. Особенно при использовании с rm -rf и я понимаю, почему сейчас. Мне пришлось использовать exec rm -rf потому что delete не работает с пустыми каталогами ‘not’.

2 / Я создал свои действия crontab -e под учетной записью root (используя sudo su ).

3 / Я изменил разрешения моих скриптов (разрешено выполнять и другим группам, используя chmod 756 file ).

Права доступа к файлам:

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

Автор сценария:

 #!/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 {} + 

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 

В то же время я уже создал еще один для другой камеры и отлично работает.