У меня есть скрипт bash, который по расписанию запускается каждые 1 минуту в CRON. Внутри скрипта также есть средство проверки экземпляров, чтобы он не выполнял скрипт более одного раза. Скрипт имеет бесконечный цикл, который пытается проверить, есть ли в каталоге какие-либо файлы. Если есть доступные файлы, он отправит эти файлы через CURL. В течение 1 секунды происходит сон, после чего он возобновляет бесконечный цикл. Файлы непрерывно поступают в папку каждую секунду.
Пожалуйста, смотрите ниже фрагмент кода.
Сценарий работает, как и ожидалось, в течение 15-20 минут, но после этого он просто не обнаруживает никаких новых файлов. ,Мне было интересно, есть ли что-то, что я должен изменить в моем сценарии ниже.
Обновлено
infinite_loop() {
while true
do
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
while IFS= read -d $'\0' -r file ; do
echo "File List ARR: $file"
SEND_POST=`curl -X POST -H "Content-Type: multipart/form-data" -F "data=$file" URL_HERE`
if [ $? -eq 0 ]; then
echo "$TIMESTAMP - File successfully sent"
mv $file $PROC/$file
else
echo "$TIMESTAMP - Error sending file"
fi
unset file
done < <(find "${WORK}" -name "*.xml" -print0)
echo `date` "sleeping..."
sleep 1
done
}
Обновление
Это та часть, в которой будет обеспечено выполнение не более 1 сценария
scriptChecker() {
searchString="ps -efl | grep "mysearchString" | grep -v \"grep\" | wc -l"
if [ $searchString -le 1 ]; then
echo "Run script "
infinite_loop
else
echo "Another script is running "
exit 1
fi
}
увеличить время ожидания сценария с 15 минут до почти часа. После этого он просто зависнет и не обнаружит никаких файлов. Я думаю, что файл когда вызывает некоторые проблемы, потому что он многократно повторяется. Я понятия не имею, что происходит в фоновом режиме, если переменная внутри цикла переинициализируется или освобождается память. Но оцените, если кто-нибудь может предоставить обратную связь. Спасибо