2016-02-16 6 views
2

У меня есть php-скрипт, который я запускаю через nohup, у которого была эта проблема в середине его с mysql. Мой скрипт проходит через пару сотен баз данных и выполняет миграцию схемы через. (Все же схема)nohup php script mysql проблемы в середине

`system("mysql --host=$db_host --user=$db_user --password=$db_password -v -v -v $database < ../update.sql");` 

В середине миграций это происходит:

-------------- 
ALTER TABLE `phppos_customers` ADD `current_sales_for_discount` int(10) NOT NULL DEFAULT '0' AFTER `current_spend_for_points` 
-------------- 

Terminal close -- sending "KILL QUERY 966" to server ... 
Terminal close -- query aborted 
Aborted 

Сценарий PHP продолжает работать и другие базы данных не имеют этой проблемы. Что может вызвать это?

PHP скрипт запускается с помощью:

nohup php update_pos_databases.php > results.txt 2>&1 </dev/null &

Это на Mac OS X 10.11.3

Вот мои значения тайм-аута:

mysql> SHOW VARIABLES LIKE "%_timeout"; 
+-----------------------------+----------+ 
| Variable_name    | Value | 
+-----------------------------+----------+ 
| connect_timeout    | 10  | 
| delayed_insert_timeout  | 300  | 
| have_statement_timeout  | YES  | 
| innodb_flush_log_at_timeout | 1  | 
| innodb_lock_wait_timeout | 50  | 
| innodb_rollback_on_timeout | OFF  | 
| interactive_timeout   | 28800 | 
| lock_wait_timeout   | 31536000 | 
| net_read_timeout   | 30  | 
| net_write_timeout   | 60  | 
| rpl_stop_slave_timeout  | 31536000 | 
| slave_net_timeout   | 60  | 
| wait_timeout    | 28800 | 
+-----------------------------+----------+ 
13 rows in set (0.00 sec) 

Какие из них я должен изменить?

Здесь больше информации по коду:

foreach($databases as $database) 
{ 
    echo "Running queries on $database\n***********************************\n"; 
    system("mysql --host=$db_host --user=$db_user --password=$db_password -v -v -v $database < ../update.sql"); 
    echo "\n\n"; 
} 
+0

Похоже, вы получаете тайм-аут от mysql. 'SHOW VARIABLES LIKE"% _timeout "' (пожалуйста, отредактируйте/добавьте результат в свой ответ), чтобы получить список релевантных переменных с сервера. Осмотрите 'connect_timeout',' wait_timeout', 'interactive_timeout', возможно, один из них слишком низок. – maxhb

+0

Я добавил информацию к вопросу. Являются ли эти значения в секундах или миллисекундах? Какой я должен изменить? Какие хорошие ценности? –

+0

Как вы думаете, это innodb_lock_wait_timeout? –

ответ

1

Несколько предложений (нашел на старом Reddit нити):

Использование «откреститься» после выполнения команды поЬир. например

nohup php update_pos_databases.php > results.txt 2>&1 </dev/null & 
disown %1 

или:

Используйте "экран" вместо поЬир.

+0

Я читал этот http://askubuntu.com/a/612106. Это почти похоже на то, что системная команда появляется в той же оболочке, поэтому скрипт php поддерживает но системная команда каким-то образом связана с терминалом. –

+0

Кстати ваша команда действительно работает; но я озадачен тем, почему мне даже нужно отключить% 1. –

+0

Команда disown удаляет задание из таблицы заданий - в основном это означает, что система не будет посылать сигнал SIGHUP, если терминал закрывается. Это может иметь или не иметь эффекта, который вам нужен. Возможно, вам действительно нужно отключить каждую команду mysql, поскольку они запущены. –

 Смежные вопросы

  • Нет связанных вопросов^_^