Zammad: PGConsumeInput()のファイル記述子が正しくないため、スケジューラーが実行されていません

作成日 2017年09月11日  ·  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は接続可能で、問題なく動作します。

bug

最も参考になるコメント

@martiniアップデートが

少しで2.0へのダウングレードを試みます。

全てのコメント23件

これは通常、tempまたはデータストアにスペースが残っていない場合に発生します。 これはZammadに関連しているとは思いません。 トレースバックは直接
ActiveRecord

ファイルシステム(スペースとiノード)をチェックして、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には内部チェックメカニズムがないようです。 両方を再起動しても状況は変わりません。


開発ブランチを使用しないことは理解していますが、LDAPが必要だったため、1.6から始めて、バージョンを固定するのを忘れる必要がありました。

また、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%CPU使用率とこのエラー

テール: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 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スレッド '
script / scheduler.rb:66:in `block in

@HagelsturmどのOS? そして、どのプロセスが100%かかりますか?

私たちの場合は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 $@

私は昨日Debian8を使用しています。バージョン9も試してみます
しかし、エラーは同じです
-tが私からではなくパッケージから来たものは何も変更しません

100%のプロセスはRubyです
script / scheduler.rb start -t
毎回起動してクラッシュします

Scheduler.rbから--help:

  • "-t、-ontopトップにとどまる(デーモン化しない)"

たぶん、しかしスケジューラは常にクラッシュします
死ぬ理由はオントップパラメータだと思いますか?

@Hagelsturm
いいえ、それが何をするのかを明確にしたかっただけです。 マティーニの答えを見ませんでした。
デーモン化はsystemdによって行われるため、通常は問題ありません。

@マティーニ
私が覚えているなら、systemdはスケジューラーが失敗し、ユニットファイルからバックラウンドに入ったときに停止したと考えるので、正しい「-t」が使用されます。

@mweinelt
2.1.1を使用している場合は、開発リポジトリにいます。
そこに安定したパッケージを固定する方法はありません。
安定したリポジトリを使用して安定したパッケージを取得します: https

@monotek
Type=forkingを設定すると、私が間違っていなければ、 -tなしで開始できるはずです。

安定版リリース(2.0.x)へのダウングレードについて:
最近のバックアップがない場合は、一部の移行を元に戻す必要がありますよね?

ヒントをありがとう。 後で変更してみます。 packager.ioで可能かどうかわからない。

さて、今はバージョン2.0を使用しています
しかし今、私は電子メールチャネルに問題があります

Email :: Notification out Channel :: Driver :: Smtpを使用できません:#<:econnrefused:i = "6">

アカウントが空なので設定を確認できません:-(

ticket
チャネルはアクティブですが、1時間フェッチされません
Channel:Email :: Notification out Channel :: Driver :: Smtp:#<:econnrefused:i = "7">を使用できません

設定することがどのようにCLIで新しいのですか?

@Hagelsturmはsmtp設定を確認してみてください。おそらく、電子メールチャネル設定のSMTPのホストパラメータがありません。 また、あなたの問題は新しい問題なので、新しい問題を作成する必要がありますか?

こんにちは! ここでもまったく同じ問題です。 #1473からここに着きます。 バージョン2.0をインストールしましたが、@ Hagelsturmからの最後のコメントに関連している可能性があるため、電子メールチャネル構成に新しい電子メールアカウントを追加できませんでした。

最近のバックアップがない場合は、一部の移行を元に戻す必要がありますよね?

@mweinelt申し訳ありませんが、このフィードバックは表示されませんでした。 現時点では、安定版と開発版の間でデータベースの移行はありません。 そのため、現在、安定版とマスターを切り替えて、問題なく開発できます。

とにかく、「PGConsumeInputの不正なファイル記述子」の問題が修正されたようです。 したがって、最初に開発を更新する場合(安定版に戻す前に)は問題ありません!

フィードバックをありがとう!

-マーティン

@Hagelsturm JFIあなたの電子メールの問題は、このスケジューラーの問題とは

@martiniアップデートが

少しで2.0へのダウングレードを試みます。

このページは役に立ちましたか?
0 / 5 - 0 評価