LINUX.ORG.RU
ФорумAdmin

обновить данные mysql из bash скрипта

 ,


0

2

Помогите дописать или написать скрипт. Задача такая. Есть база данных(mysql) с таблицей servers, в ней есть поля server_id и server_status. Нужно вытащить все значение из поля server_id, эти значения прогнать через команду. И уже полученные значения внести в поле server_status. Вот что у меня пока получилось:

#!/bin/sh

user="debian-sys-maint"
pass="oS6D87L8iWkrvdJK"
db="mon"
sql="select server_id from servers"
TEST=`mysql -u $user -p$pass $db -e "$sql"`
printf "$TEST" > serverid
ID=`cat /home/bulat/serverid | grep -v server_id`
Q=` for SERVER in $ID; do
su -l gs$SERVER -c "screen -ls | grep -c gameserver"
done`
#echo "$Q"
mysql -u $user -p$pass $db -e "UPDATE servers SET server_status='$Q' WHERE server_id='$ID'"

При таком раскладе, меняеться почему только первая строка в таблице. А как его дописать так что бы обновились все строки?

Скрипт выполняется построчно. Вы в ″$Q″ заносите статус всех серверов, но в SQL-запросе UPDATE так нельзя, нужно кучу UPDATE'ов делать.

Поэтому в цикле нужно формировать нужное кол-во UPDATE'ов, а потом их все выполнять:

> Updates
for SERVER in $ID; do
  Q=`su -l gs$SERVER -c "screen -ls | grep -c gameserver" `
  echo "UPDATE servers SET server_status=$Q WHERE server_id=$ID" >> Updates
done

mysql -u $user -p$pass $db < Updates

mky ★★★★★ ()
Ответ на: комментарий от mky

Логика понятно, спасибо. А вот с реализацией есть проблемы, файл Updates получается в таком формате

cat /home/bulat/Updates
UPDATE servers SET server_status='0' WHERE server_id='43
44
45'
UPDATE servers SET server_status='1' WHERE server_id='43
44
45'
UPDATE servers SET server_status='1' WHERE server_id='43
44
45'

evilsend ()
Ответ на: комментарий от evilsend

наверно, ошибка здесь:

  echo "UPDATE servers SET server_status=$Q WHERE server_id=$ID" >> Updates
  echo "UPDATE servers SET server_status=$Q WHERE server_id=$SERVER" >> Updates

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.