Zammad: Der Scheduler wird aufgrund eines fehlerhaften Dateideskriptors in PGConsumeInput () nicht ausgeführt.

Erstellt am 11. Sept. 2017  ·  23Kommentare  ·  Quelle: zammad/zammad

Seit dem Upgrade von 1.6.x auf 2.1.x haben wir festgestellt, dass keine Mails mehr abgerufen werden. Zu diesem Zeitpunkt haben wir festgestellt, dass der Scheduler mit seiner PostgreSQL-Verbindung auf einen Fehler stößt.

Infos:

  • Verwendete Zammad-Version: 2.1.1-1505128598.ef38800b.jessie
  • Verwendete Zammad-Installationsquelle: Paket
  • Betriebssystem: Debian 8
  • PostgreSQL-Version: 9.4.13-0 + deb8u1

Gesundheit

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

Log

==> /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)

Das PostgreSQL ist anschließbar und funktioniert einwandfrei.

bug

Hilfreichster Kommentar

@martini Ich kann bestätigen, dass das Update den Trick getan hat. Vielen Dank!

Ich werde gleich versuchen, ein Downgrade auf 2.0 durchzuführen.

Alle 23 Kommentare

Dies geschieht normalerweise, wenn im temporären Bereich oder im Datenspeicher kein Speicherplatz mehr vorhanden ist. Ich glaube nicht, dass dies mit Zammad zusammenhängt. Der Traceback ist direkt von
Aktiver Rekord

Ich schlage vor, das Dateisystem (Speicherplatz und Inodes) zu überprüfen und die PG-Datenbank zu überprüfen.

Bearbeiten:
Was passiert, wenn Sie Scheduler und Postgresql neu starten?

Hinweis:
Bitte benutzen Sie nicht den Entwicklungszweig in der Produktion! 2.0 ist stabil

Das Dateisystem sieht nicht annähernd voll aus.

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 scheint keine interne Überprüfungsmechanik zu haben. Ein Neustart beider ändert nichts an der Situation.


Ich verstehe, dass wir den Entwicklungszweig nicht verwenden sollten, aber wir mussten mit 1.6 beginnen, da wir LDAP benötigten, und dann vergessen, die Version zu pinnen.

Auch PostgreSQL ist klar und zugänglich. Dies funktioniert auch mit den in /opt/zammad/config/database.yml festgelegten Anmeldeinformationen.

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)

Heute habe ich das gleiche auf Mac OS 10.12.6 (aber es hat die Tage zuvor funktioniert 🤥) mit Develop (Zammad 2.1). Alles funktioniert (Schienen c, Schienen s, ...) und erwartet den Scheduler.

Ich habe das gleiche Upgrade von 1,5 auf 2,0 100% CPU-Auslastung und diesen Fehler

tail: scheduler_err.log: Datei Gebühren
ActiveRecord :: StatementInvalid: PG :: ConnectionBad: PQconsumeInput () konnte keine Daten vom Server empfangen: Ungültiger Dateideskriptor
: SELECT "verzögerte_Jobs". * FROM "verzögerte_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

@ Hagelsturm welches os? Und welcher Prozess dauert 100%?

In unserem Fall ist es script/scheduler.rb start -t .

In unserem Fall ist es script/scheduler.rb start -t

Das ist auch auf meiner Seite. Normalerweise wird der Scheduler im Daemon-Modus ausgeführt ( script/scheduler.rb start oder script/scheduler.rb stop ).

script/scheduler.rb start -t wird normalerweise nur für Entwickler verwendet, da der Scheduler nicht im Hintergrund (als Daemon) ausgeführt wird.

@mweinelt Eine Frage für mich ist, warum Sie -t .

JFI: Der Scheduler funktioniert für mich im Hintergrund (als Daemon) einwandfrei.

Ich verwende 2.1.1-1505985142.807a1d88.jessie weil ich vergessen habe, eine stabile Version zu verwenden. Die Option -t muss aus den Servicedateien stammen. Ich habe diesbezüglich nichts geändert.

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 $@

Ich benutze Debian 8 gestern ich versuche auch Version 9
Aber der Fehler ist der gleiche
Ich ändere nichts, was -t aus dem Paket stammt, nicht von mir

Der Prozess mit 100% ist Ruby
script / scheduler.rb start -t
Jedes Mal startet und stürzt ab

von scheduler.rb --help:

  • "-t, --ontop Bleib oben (dämonisiert nicht)"

Vielleicht stürzt aber der Scheduler die ganze Zeit ab
Die Sie denken, der Grund ist der Ontop-Parameter?

@ Hagelsturm
Nein, ich wollte nur klarstellen, was es tut. Ich habe Martinis Antwort nicht gesehen.
Daemonizing wird von systemd durchgeführt, daher ist dies normalerweise kein Problem.

@Martini
Wenn ich mich recht erinnere, wird "-t" verwendet, weil systemd denkt, dass der Scheduler fehlgeschlagen und gestoppt ist, wenn er aus der Unit-Datei in den Hintergrund geht.

@mweinelt
Wenn Sie 2.1.1 verwenden, befinden Sie sich im Entwicklungs-Repo.
Es gibt keine Möglichkeit, ein stabiles Paket darin zu stecken.
Verwenden Sie Stable Repo, um stabile Pakete zu erhalten: https://packager.io/gh/zammad/zammad/builds/2414/install/debian-8

@ Monotek
Das Setzen von Type=forking sollte das Starten ohne -t wenn ich mich nicht irre.

In Bezug auf das Downgrade auf eine stabile Version (2.0.x):
Ich müsste einige Migrationen zurücksetzen, wenn ich kein aktuelles Backup habe, oder?

Danke für den Tipp. Ich werde versuchen, es später zu ändern. Ich bin mir nicht sicher, ob dies in packager.io möglich ist.

Okay, ich benutze jetzt Version 2.0
aber jetzt habe ich ein Problem mit dem E-Mail-Kanal

Email :: Notification out Kann Channel :: Driver :: Smtp: # <: econnrefused: i = "6"> nicht verwenden

Ich kann die Einstellungen nicht überprüfen, da das Konto leer ist :-(

ticket
Kanal ist aktiv, wird aber 1 Stunde lang nicht abgerufen
Kanal: E-Mail :: Benachrichtigung aus Kanal :: Treiber :: Smtp: # <: econnrefused: i = "7"> kann nicht verwendet werden

Wie ist es möglich, neu auf dem CLI zu setzen?

@ Hagelsturm versuchen Sie Ihre SMTP-Einstellungen zu überprüfen, wahrscheinlich ist der Host-Parameter für SMTP in Ihren E-Mail-Kanal-Einstellungen nicht vorhanden. Da es sich bei Ihrem Problem um ein neues Problem handelt, sollten Sie auch ein neues Problem erstellen.

Hallo! Das gleiche Problem hier. Ich komme von # 1473 hierher. Ich habe Version 2.0 installiert, konnte jedoch kein neues E-Mail-Konto zur Konfiguration des E-Mail-Kanals hinzufügen, möglicherweise im Zusammenhang mit dem letzten Kommentar von @Hagelsturm.

Ich müsste einige Migrationen zurücksetzen, wenn ich kein aktuelles Backup habe, oder?

@mweinelt sorry, ich habe dieses Feedback nicht gesehen. Derzeit gibt es keine Datenbankmigrationen zwischen Stable und Develop. Im Moment können Sie also problemlos zwischen Stable / Master wechseln und sich weiterentwickeln.

Wie auch immer, es scheint, dass ich das Problem "Ungültiger Dateideskriptor in PGConsumeInput" behoben habe. Wenn Sie also zuerst die Entwicklung aktualisieren (bevor Sie wieder zu Stable wechseln), ist dies in Ordnung!

Danke für die Rückmeldung!

-Martin

@ Hagelsturm JFI Ihr E-Mail-Problem hat nichts mit diesem Scheduler-Problem zu tun. Ein anderes Problem wäre dafür gut.

@martini Ich kann bestätigen, dass das Update den Trick getan hat. Vielen Dank!

Ich werde gleich versuchen, ein Downgrade auf 2.0 durchzuführen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen