Cron bash скрипт - команда find никогда не выполнялась - PullRequest
1 голос
/ 27 января 2020

Пожалуйста, посмотрите на мой скрипт, чтобы получить и проанализировать данные xmltv:

#! /bin/bash

/bin/rm -f /home/hts/webgrab/multiple/out/*.xml

/home/hts/webgrab/multiple/1/run.sh &
/home/hts/webgrab/multiple/2/run.sh &
/home/hts/webgrab/multiple/3/run.sh &
/home/hts/webgrab/multiple/4/run.sh &
/home/hts/webgrab/multiple/5/run.sh &
/home/hts/webgrab/multiple/6/run.sh &
/home/hts/webgrab/multiple/7/run.sh &
/home/hts/webgrab/multiple/8/run.sh &
/home/hts/webgrab/multiple/9/run.sh &
/home/hts/webgrab/multiple/10/run.sh &
/home/hts/webgrab/multiple/11/run.sh &
/home/hts/webgrab/multiple/12/run.sh &
/home/hts/webgrab/multiple/13/run.sh &
/home/hts/webgrab/multiple/14/run.sh &
/home/hts/webgrab/multiple/15/run.sh &
/home/hts/webgrab/multiple/16/run.sh &
/home/hts/webgrab/multiple/17/run.sh &
/home/hts/webgrab/multiple/18/run.sh &
/home/hts/webgrab/multiple/19/run.sh &
/home/hts/webgrab/multiple/20/run.sh &
/home/hts/webgrab/multiple/21/run.sh &


wait

/usr/bin/tv_cat /home/hts/webgrab/multiple/out/*.* > /home/hts/webgrab/multiple/out/guide.xml

#copy result with timestamp
/bin/cp -rf /home/hts/webgrab/multiple/out/guide.xml "/var/www/guide/guide-$(date +"%Y%m%d").xml"

sleep 10

#find and rename file 5 day old
/usr/bin/find /var/www/guide -type f -name 'guide*' -mtime 5 -execdir /bin/mv {} /var/www/guide/pl.xml ';' 2> /home/hts/epg.log

Как видите, выполняется несколько webgrab экземпляров программы, скрипт ждет, пока все они завершатся sh. Затем результаты объединяются в один файл xmltv (guide. xml), затем guide. xml копируется в каталог /var/www/guide с отметкой времени. Последний шаг:

/usr/bin/find /var/www/guide -type f -name 'guide*' -mtime 5 -execdir /bin/mv {} /var/www/guide/pl.xml ';' 2> /home/hts/epg.log

находит старый файл за 5 дней * go, если существует (-mtime 5) и переименовывает его (с перезаписью старого) в pl.xml.

Проблема: похоже, последняя команда никогда не выполняется. В результате выполнения задания cron я получаю только новый файл метки времени, но переименованный pl.xml всегда отсутствует. Но если я запускаю команду find, как указано выше, из командной строки, старый файл корректно переименовывается в pl.xml

Есть идеи, что здесь не так? Полные пути команд включены, чтобы убедиться, что они будут работать с cron. Но это не помогло, команда найти и переименовать не работает. Старый файл наверняка существует, потому что он был создан 5 днями ранее, но по какой-то причине команда переименования не работает из cron внутри этого скрипта.

1 Ответ

0 голосов
/ 24 февраля 2020

Я знаю, что не так, виновна команда find - опции -mtime 5 действительно возвращают файлы 5-дневной давности. Однако, это также заботится о времени, а не только о дате. Таким образом, если это не полные 5 дней go (включая час дня), find ничего не вернет. Мои возможные решения:

  • убедитесь, что я звоню find в spefi c время, чтобы получить всегда полные 5 дней
  • не использовать mtime и анализировать временные метки из имен файлов вместо этого (это кажется самым простым и наиболее безопасным решением)
  • найти способ заставить команду find пропускать часы и использовать дату только для своих вычислений (на самом деле я понятия не имею, как это сделать)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...