Выполнение длительной команды linux на экранной сессии

0

Я написал сценарий bash, он включает в себя часть, где скрипт проверяет размер файла, и если он превышает 2 ГБ, тогда он запустит сеанс экрана и начнет импортировать файл дампа БД. Но когда выполнение скрипта достигает этой конкретной части, оно не работает. Значит, скрипт завершает выполнение до того, как db dump импортируется. Я предполагаю, что это происходит потому, что сеанс экрана не ждет завершения выполнения команды импорта дампа db. Сценарий не будет выглядеть профессионалом, поскольку я начинающий в сценариях оболочки, и я не так хорошо разбираюсь в кодировании, пожалуйста, не возражайте.

Примечание. Я создал сеанс экрана с номером сокета 24602, и я пытаюсь выполнить команду импорта dump dump на этом сеансе

SCRIPT

#!/bin/bash

cd /case_data
echo "Conditions:
        1.DB dump file should be there in /case_data/<case number>/ location
        2.DB dump file should end with extension .sql"

        read -p "Please enter a case number for which you need to update the DB file:" casenum


if [[ -z "$casenum" ]] ; then
        echo 'Exiting automation as there is no user INPUT. Hasta La Vista!!'
        return 0

elif [[ ${#casenum} -ne 5 ]]; then
        echo "Error: Case number should contain 5 characters. Please enter the case number again!!"
        return 0

elif [[ $casenum == *['!'@#\$%^\&*()_+]* ]]; then
        echo "Error: Special characters are not allowed. Please enter the case number again!!"
        return 0

elif [ -e "$casenum" ]; then

        echo "Modifying the DB dump file for the case number $casenum"
        cd /case_data/$casenum
        filesize='du -h --block-size=G *.sql | head -c 1'
       'sed -i '1s/^/SET autocommit=0;\n/' *.sql'
       'echo "COMMIT;" >> *.sql'
        mv *.sql c$casenum.sql
        echo "DB dump file modification completed!!"
        echo "Initiating customer DB dump import to the DB c$casenum"
if [ $filesize -ge 2 ]; then
        echo "Customer DB greater than 2 GB, started a screen session"
        echo "Customer DB import started. Please wait till the import is completed"
        screen -S 24602 -X 'mysql -ss -N -uroot -ppassword -e "use c$casenum;source /case_data/$casenum/c$casenum.sql";'

else
        echo "Customer DB less than 2 GB so skipping screen session!!!"
        echo "Customer DB import started. Please wait till the import is completed"
        mysql -ss -N -uroot -ppassword -e "use c$casenum;source /case_data/$casenum/c$casenum.sql;"
        echo "Customer DB import completed successfully!!!"
fi

else

        echo "Directory does not exist, please check the case number entered"

fi
  • 0
    Что вы видите, если вводите команду в командной строке?
  • 0
    Он ничего не показывает, и я изменил команду mysql для создания базы данных и удаления базы данных небольших баз данных, так как для ее выполнения требуется только короткое время, и она работает хорошо. Импорт БД - это длительный процесс, я полагаю, что это причина того, что скрипт не выполняется должным образом, так как сеанс экрана будет завершен, как только будет выполнена команда.
Теги:

1 ответ

0

Вы неправильно поняли " screen -X ".

-X Отправьте указанную команду на сеанс работы экрана.

Указанная здесь команда означает команду экрана, которая является командой, используемой в режиме командной строки экрана (Ca :) или в файлах screenrc.

screen -S 24602 -X 'mysql...' не будет работать, потому что mysql является внешней командой bash, а не командой экрана.

Замените его screen -S 24602 -X screen mysql... должен работать. (ПРИМЕЧАНИЕ: никаких кавычек.) Он запустит mysql... в новом окне в сеансе 24602, вы можете нажать C-a_C-a для переключения окна.

И BTW, screen -S 24602 не означает "номер сокета 24602", это означает, что имя сеанса равно 24602.

  • 0
    Большое спасибо за предложение, позвольте мне попробовать это и вернуться к вам :-)
  • 0
    Я пробовал с приведенной ниже командой, но она не работает. Сеанс экрана создается, но импорт БД не происходит. Я попытался войти в MySQl и выполнил show processlist; для подтверждения. screen -S 24602 -X screen mysql -ss -N -uroot -ppassword -e "использовать c $ casenum; source /case_data/$casenum/c$casenum.sql";
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню