Linux Bashscript с бесконечным циклом перестает работать через некоторое время - PullRequest
0 голосов
/ 10 октября 2019

У меня есть скрипт 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 минут до почти часа. После этого он просто зависнет и не обнаружит никаких файлов. Я думаю, что файл когда вызывает некоторые проблемы, потому что он многократно повторяется. Я понятия не имею, что происходит в фоновом режиме, если переменная внутри цикла переинициализируется или освобождается память. Но оцените, если кто-нибудь может предоставить обратную связь. Спасибо

...