Я написал сценарий 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
Вы неправильно поняли " 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.