Zammad: Планировщик не работает из-за неверного файлового дескриптора в PGConsumeInput ()

Созданный на 11 сент. 2017  ·  23Комментарии  ·  Источник: zammad/zammad

После обновления с 1.6.x до 2.1.x мы заметили, что письма больше не извлекаются. Это когда мы заметили, что планировщик выдает ошибку при подключении к PostgreSQL.

Информация:

  • Используемая версия Zammad: 2.1.1-1505128598.ef38800b.jessie
  • Используемый источник установки Zammad: пакет
  • Операционная система: Debian 8
  • Версия PostgreSQL: 9.4.13-0 + deb8u1

Здоровье

channel is active but not fetched for 1 hour
channel is active but not fetched for 1 hour
channel is active but not fetched for 1 hour
channel is active but not fetched for 1 hour
scheduler not running

Бревно

==> /var/log/zammad/scheduler_err.log <==
ActiveRecord::StatementInvalid: PG::ConnectionBad: PQconsumeInput() could not receive data from server: Bad file descriptor
: SELECT "delayed_jobs".* FROM "delayed_jobs"
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `async_exec'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `block in exec_no_cache'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:590:in `block in log'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.5/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `exec_no_cache'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:585:in `execute_and_clear'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in `exec_query'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract/database_statements.rb:377:in `select_prepared'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract/database_statements.rb:39:in `select_all'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract/query_cache.rb:95:in `select_all'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/querying.rb:39:in `find_by_sql'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation.rb:702:in `exec_queries'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation.rb:583:in `load'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation.rb:260:in `records'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation/delegation.rb:38:in `each'
  /opt/zammad/app/models/scheduler.rb:78:in `cleanup'
  /opt/zammad/app/models/scheduler.rb:24:in `threads'
  script/scheduler.rb:66:in `block in <top (required)>'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/daemons-1.2.4/lib/daemons/application.rb:266:in `block in start_proc'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/daemons-1.2.4/lib/daemons/application.rb:275:in `start_proc'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/daemons-1.2.4/lib/daemons/application.rb:296:in `start'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/daemons-1.2.4/lib/daemons/controller.rb:56:in `run'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/daemons-1.2.4/lib/daemons.rb:197:in `block in run_proc'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/daemons-1.2.4/lib/daemons/cmdline.rb:92:in `catch_exceptions'
  /opt/zammad/vendor/bundle/ruby/2.4.0/gems/daemons-1.2.4/lib/daemons.rb:196:in `run_proc'
  script/scheduler.rb:49:in `<top (required)>'
==> /var/log/zammad/scheduler_out.log <==
bundler: failed to load command: script/scheduler.rb (script/scheduler.rb)

PostgreSQL подключается и работает нормально.

Самый полезный комментарий

@martini Я могу подтвердить, что обновление

Попробую через немного понизить версию до 2.0.

Все 23 Комментарий

Обычно это происходит, когда не остается места во временном хранилище или хранилище данных. Я не думаю, что это связано с Заммадом. Отслеживание прямо из
ActiveRecord

Я предлагаю проверить файловую систему (пространство и inodes) и выполнить проверку базы данных PG.

Редактировать:
Что произойдет, если вы перезапустите и планировщик, и Postgresql?

Примечание:
Пожалуйста, не используйте ветку разработки в продакшене! 2.0 стабильна

Файловая система даже близко не выглядит полной.

hexa<strong i="6">@tickets</strong>:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  6.2G   13G  34% /
udev             10M     0   10M   0% /dev
tmpfs           502M   45M  457M   9% /run
tmpfs           1.3G   16K  1.3G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           1.3G     0  1.3G   0% /sys/fs/cgroup
tmpfs           251M     0  251M   0% /run/user/2000
hexa<strong i="7">@tickets</strong>:~$ df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/xvda1     1310720 97329 1213391    8% /
udev            314738   268  314470    1% /dev
tmpfs           320664   313  320351    1% /run
tmpfs           320664     5  320659    1% /dev/shm
tmpfs           320664     3  320661    1% /run/lock
tmpfs           320664    13  320651    1% /sys/fs/cgroup
tmpfs           320664     4  320660    1% /run/user/2000

PostgreSQL, похоже, не имеет механизма внутренней проверки. Перезапуск обоих не меняет ситуации.


Я понимаю, что не следует использовать ветку разработки, но нам нужно было начать с 1.6, так как нам требовался LDAP, а затем мы забыли закрепить версию.

Кроме того, PostgreSQL явно активен и доступен. Это также работает с учетными данными, установленными в /opt/zammad/config/database.yml .

root<strong i="7">@tickets</strong>:/home/hexa# sudo -u postgres psql
psql (9.4.13)
Type "help" for help.

postgres=# \connect zammad
You are now connected to database "zammad" as user "postgres".

zammad=# \dt
                      List of relations
 Schema |                Name                | Type  | Owner  
--------+------------------------------------+-------+--------
 public | activity_streams                   | table | zammad
 public | ar_internal_metadata               | table | zammad
 public | authorizations                     | table | zammad
 public | avatars                            | table | zammad
 public | calendars                          | table | zammad
 public | channels                           | table | zammad
 public | chat_agents                        | table | zammad
 public | chat_messages                      | table | zammad
 public | chat_sessions                      | table | zammad
 public | chat_topics                        | table | zammad
 public | chats                              | table | zammad
 public | cti_caller_ids                     | table | zammad
 public | cti_logs                           | table | zammad
 public | delayed_jobs                       | table | zammad
 public | email_addresses                    | table | zammad
 public | external_credentials               | table | zammad
 public | external_syncs                     | table | zammad
 public | groups                             | table | zammad
 public | groups_users                       | table | zammad
 public | histories                          | table | zammad
 public | history_attributes                 | table | zammad
 public | history_objects                    | table | zammad
 public | history_types                      | table | zammad
 public | http_logs                          | table | zammad
 public | import_jobs                        | table | zammad
 public | jobs                               | table | zammad
 public | karma_activities                   | table | zammad
 public | karma_activity_logs                | table | zammad
 public | karma_users                        | table | zammad
 public | link_objects                       | table | zammad
 public | link_types                         | table | zammad
 public | links                              | table | zammad
 public | locales                            | table | zammad
 public | macros                             | table | zammad
 public | network_categories                 | table | zammad
 public | network_categories_moderator_users | table | zammad
 public | network_category_subscriptions     | table | zammad
 public | network_category_types             | table | zammad
 public | network_item_comments              | table | zammad
 public | network_item_plus                  | table | zammad
 public | network_item_subscriptions         | table | zammad
 public | network_items                      | table | zammad
 public | network_privacies                  | table | zammad
 public | networks                           | table | zammad
 public | notifications                      | table | zammad
 public | oauth_access_grants                | table | zammad
 public | oauth_access_tokens                | table | zammad
 public | oauth_applications                 | table | zammad
 public | object_lookups                     | table | zammad
 public | object_manager_attributes          | table | zammad
 public | online_notifications               | table | zammad
 public | organizations                      | table | zammad
 public | organizations_users                | table | zammad
 public | overviews                          | table | zammad
 public | overviews_groups                   | table | zammad
 public | overviews_roles                    | table | zammad
 public | overviews_users                    | table | zammad
 public | package_migrations                 | table | zammad
 public | packages                           | table | zammad
 public | permissions                        | table | zammad
 public | permissions_roles                  | table | zammad
 public | postmaster_filters                 | table | zammad
 public | recent_views                       | table | zammad
 public | report_profiles                    | table | zammad
 public | roles                              | table | zammad
 public | roles_groups                       | table | zammad
 public | roles_users                        | table | zammad
 public | schedulers                         | table | zammad
 public | schema_migrations                  | table | zammad
 public | sessions                           | table | zammad
 public | settings                           | table | zammad
 public | signatures                         | table | zammad
 public | slas                               | table | zammad
 public | stats_stores                       | table | zammad
 public | store_files                        | table | zammad
 public | store_objects                      | table | zammad
 public | store_provider_dbs                 | table | zammad
 public | stores                             | table | zammad
 public | tag_items                          | table | zammad
 public | tag_objects                        | table | zammad
 public | tags                               | table | zammad
 public | taskbars                           | table | zammad
 public | templates                          | table | zammad
 public | templates_groups                   | table | zammad
 public | text_modules                       | table | zammad
 public | text_modules_groups                | table | zammad
 public | ticket_article_flags               | table | zammad
 public | ticket_article_senders             | table | zammad
 public | ticket_article_types               | table | zammad
 public | ticket_articles                    | table | zammad
 public | ticket_counters                    | table | zammad
 public | ticket_flags                       | table | zammad
 public | ticket_priorities                  | table | zammad
 public | ticket_state_types                 | table | zammad
 public | ticket_states                      | table | zammad
 public | ticket_time_accountings            | table | zammad
 public | tickets                            | table | zammad
 public | tokens                             | table | zammad
 public | translations                       | table | zammad
 public | triggers                           | table | zammad
 public | type_lookups                       | table | zammad
 public | user_devices                       | table | zammad
 public | users                              | table | zammad
(103 rows)

Сегодня у меня то же самое на mac os 10.12.6 (но работало накануне 🤥) с develop (Zammad 2.1). Все работает (rails c, rails s, ...) в ожидании планировщика.

У меня такое же обновление с 1.5 до 2.0 100% загрузка ЦП и эта ошибка

хвост: scheduler_err.log: Datei abgeschnitten
ActiveRecord :: StatementInvalid: PG :: ConnectionBad: PQconsumeInput () не может получить данные с сервера: неверный дескриптор файла
: SELECT "delayed_jobs". * FROM "delayed_jobs"
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in async_exec' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in блок
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:590:in block in log' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.5/lib/active_support/notifications/instrumenter.rb:21:in instrument '
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract_adapter.rb:583:in log' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in exec_no_cache '
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql_adapter.rb:585:in execute_and_clear' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in exec_query '
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract/database_statements.rb:377:in select_prepared' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract/database_statements.rb:39:in select_all '
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/connection_adapters/abstract/query_cache.rb:95:in select_all' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/querying.rb:39:in find_by_sql '
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation.rb:702:in exec_queries' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation.rb:583:in load '
/opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation.rb:260:in records' /opt/zammad/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.5/lib/active_record/relation/delegation.rb:38:in каждый '
/opt/zammad/app/models/scheduler.rb:78:in cleanup' /opt/zammad/app/models/scheduler.rb:24:in нитей '
script / scheduler.rb: 66: в `блоке в

@Hagelsturm какая

В нашем случае это script/scheduler.rb start -t .

В нашем случае это script/scheduler.rb start -t

Это тоже на моей стороне. Обычно планировщик работает в режиме демона ( script/scheduler.rb start или script/scheduler.rb stop ).

script/scheduler.rb start -t обычно используется только для разработчиков, потому что планировщик не работает в фоновом режиме (как демон).

@mweinelt Меня спрашивает, почему вы используете -t ?

JFI: Планировщик у меня отлично работает в фоновом режиме (как демон).

У меня 2.1.1-1505985142.807a1d88.jessie потому что я забыл закрепить стабильную версию. Параметр -t должен исходить из служебных файлов, я ничего не менял в этом отношении.

root<strong i="8">@tickets</strong>:/opt/zammad# grep -ri "scheduler.rb start" *
contrib/systemd/zammad-scheduler.service:ExecStart=/bin/bash -l -c "${BUNDLE_BINARY} exec script/scheduler.rb start -t"
Procfile:worker: bundle exec script/scheduler.rb start -t
Procfile.frontend:worker: bundle exec ruby script/scheduler.rb start -t
script/init-script-normal-user-rvm-fedora:    script/scheduler.rb start &> /dev/null && echo_success || echo_failure
script/init.d/zammad:  execute "RAILS_ENV=production script/scheduler.rb start $SCHEDULER_OPTS"
script/build/test_startup.sh:bundle exec script/scheduler.rb start
script/local_browser_tests.sh:script/scheduler.rb start
vendor/pkgr/processes/worker:exec bundle exec script/scheduler.rb start -t $@

Я использую Debian 8 вчера, я тоже пробую версию 9
Но ошибка такая же
Я ничего не изменяю, -t пришло из пакета, а не от меня

Процесс со 100% - это Ruby
скрипт / scheduler.rb start -t
Каждый раз запускается и рушится

из scheduler.rb --help:

  • "-t, --ontop Оставаться наверху (не демонизирует)"

Может быть, но Планировщик все время падает
Die Вы думаете, что причина в параметре наверху?

@Hagelsturm
Нет, просто хотел уточнить, что он делает. Не видел ответа Мартини.
Демонизация выполняется с помощью systemd, поэтому обычно это не проблема.

@мартини
Если я правильно помню, используется "-t", потому что systemd считает, что планировщик не работает и останавливается, когда он переходит в фоновый режим из файла модуля.

@mweinelt
Если вы используете 2.1.1, вы находитесь в репозитории разработки.
Нет возможности закрепить там стабильный пакет.
Используйте стабильное репо для получения стабильных пакетов: https://packager.io/gh/zammad/zammad/builds/2414/install/debian-8

@monotek
Установка Type=forking должна позволить начать без -t если я не ошибаюсь.

По поводу перехода на стабильную версию (2.0.x):
Мне бы пришлось отменить некоторые миграции, если у меня нет недавней резервной копии, верно?

Спасибо за подсказку. Попробую поменять позже. Не уверен, возможно ли это в packager.io.

хорошо, я использую версию 2.0 сейчас
но теперь у меня проблема с каналом электронной почты

Электронная почта :: Уведомление не может использовать Channel :: Driver :: Smtp: # <: econnrefused: i = "6">

Я не могу проверить настройки, потому что учетная запись пуста :-(

ticket
канал активен, но не загружается в течение 1 часа
Канал: Электронная почта :: Уведомление на выходе Невозможно использовать Channel :: Driver :: Smtp: # <: econnrefused: i = "7">

как его можно установить новенькое на кли?

@Hagelsturm попробуйте проверить свои настройки smtp, вероятно, параметр хоста для SMTP в настройках вашего канала электронной почты отсутствует. Кроме того, поскольку ваша проблема - новая проблема, вам следует создать новую проблему?

Всем привет! Здесь та же проблема. Я приезжаю с №1473. Я установил версию 2.0, но не смог добавить новую учетную запись электронной почты в конфигурацию канала электронной почты, возможно, это связано с последним комментарием от @Hagelsturm.

Мне бы пришлось отменить некоторые миграции, если у меня нет недавней резервной копии, верно?

@mweinelt извините, я не видел этого отзыва. На данный момент миграции между стабильной и развивающейся базами данных нет. Так что прямо сейчас вы можете без проблем переключаться между стабильным / основным и разрабатывать.

В любом случае, похоже, я исправил проблему «Плохой файловый дескриптор в PGConsumeInput». Так что, если вы сначала обновите разработку (до перехода обратно в стабильную версию), все будет в порядке!

Спасибо за отзыв!

-Мартин

@Hagelsturm JFI, ваша проблема с электронной почтой

@martini Я могу подтвердить, что обновление

Попробую через немного понизить версию до 2.0.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги