---
name: "ejabberd"
section: "8"
platform: "linux"
package: "ejabberd"
version: "2.1.10-4+deb7u1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/ejabberd"
---

# ejabberd(8)

a distributed fault-tolerant Jabber/XMPP server

## NAME

ejabberd — a distributed fault-tolerant Jabber/XMPP server

## SYNOPSIS

**ejabberd** *\[options\] \[--\] \[erlang\_options\]*

## DESCRIPTION

**ejabberd** is a distributed fault-tolerant Jabber/XMPP server written in Erlang.

Its main features are:

- — XMPP-compliant

  - — Distributed: **ejabberd** can run on a cluster of machines

  - — Fault-tolerant: All the information can be stored on more than one node, nodes can be added or replaced \`on the fly'

  - — Built-in Multi-User Chat service

  - — Built-in IRC transport

  - — Built-in Publish-Subscribe service

  - — Built-in Jabber User Directory service based on users vCards

  - — SSL support

  - — Support for internationalized user messages

  ## OPTIONS

- **--node** *node*

  Specifies Erlang *node* at which ejabberd server will be run. Default node is **ejabberd**. If the node name does not contain symbol *@* then actual node name becomes **node@hostname** where hostname is short host name (usually it coincides with *\`hostname -s\`*). If the node name contain symbol *@* and its hostname part is a FQDN then **ejabberd** will use so-called long names (see [**erl**(1)](/erl/1.md) manual page and look for options *-name* and *-sname* for details).

  Examples of *--node* option:

  **ejabberd** Locally run ejabberd server at node *ejabberd@\`hostname -s\`*.

  **ejabberd@otherhost** Pretend that ejabberd server runs at otherhost at node *ejabberd@otherhost*. (Note that noone can remotely connect to this node if otherhost is resoved to other computer IP.)

  **ejabberd@localhost** Locally run ejabberd server at node *ejabberd@localhost*. Only nodes running at the same host can connect to this node.

  **ejabberd@hostname.domainname** Using *-name* Erlang option, run ejabberd server at long-name node *ejabberd@hostname.domainname*. To be able to control this server instance *hostname.domainname* must resolve (either by DNS or via /etc/hosts) to the server's IP.

The default node can be overridden by defining ERLANG\_NODE environment variable in /etc/default/ejabberd, see below.

- **--config** *config-file*

  Specifies an alternate *config-file* to be parsed at startup, rather than the default (**/etc/ejabberd/ejabberd.cfg**).

- **--spool** *spool-dir*

  Specifies an alternate *spool-dir* to store user database instead of the default (**/var/lib/ejabberd**).

- **--log** *log-file*

  Log Jabber events to specified *log-file* rather than to the default (**/var/log/ejabberd/ejabberd.log**).

- **--erlang-log** *sasl-log-file*

  Log SASL (System Application Support Libraries) events to specified *sasl-log-file* rather than to the default (**/var/log/ejabberd/erlang.log**).

- *erlang\_options*

  Other options (and all options following **--**) are passed directly to **Erlang** interpreter. See **Erlang** documentation for more details on interpreter options. Some useful options are:\

  **-detached**\
       Starts the Erlang system detached from the system console.\
   **-heart**\
       Starts heart beat monitoring of the Erlang system.\
   **-noinput**\
       Ensures that the Erlang system never tries to read any input.

## CONFIGURATION FILE

The file **/etc/ejabberd/ejabberd.cfg** contains the main configuration. It is initially loaded the first time **ejabberd** is executed, then it is parsed and stored in a database. Subsiquently the configuration is loaded from the database and any commands in the configuration file are appended to the entries in the database. The configuration file consists of a sequence of Erlang terms. Parts of lines after \`%' sign are ignored. Each term is a tuple, where the first element is the name of an option, and the others are option values. E. g. if this file does not contain a "host" definition, then the value stored in the database will be used.

To override old values stored in the database the following lines can be added in config:\
\
   override\_global.\
\
   override\_local.\
\
   override\_acls.

A complete explanation of each configuration value can be found in the official **ejabberd** documentation. See "**SEE ALSO**" part of this manual page for more information about the documentation.

## OPTIONS FILE

The file **/etc/default/ejabberd** contains specific options.

- *POLL*

  If set to true this variable enables kernel polling which can reduce CPU load on a system with a high number of users. This option requires support in the kernel and in Erlang emulator.

- *SMP*

  Enables or disables SMP support in Erlang emulator. Valid values are disable (default), auto, and enable.\

  Explanation in Erlang/OTP documentation:

  **enable:** Starts the Erlang runtime system with SMP support enabled. This may fail if no runtime system with SMP support is available.\
   **auto:** Starts the Erlang runtime system with SMP support enabled if it is available and more than one logical processor are detected.\
   **disable:** Starts a runtime system without SMP support.

- *ERL\_MAX\_PORTS*

  To use more than 1024 connections (default value), *ERL\_MAX\_PORTS* should be set to the number of connections needed.

- *PROCESSES*

  Specifies the maximum number of Erlang processes to use. Default value is 250000. Maximum value is 268435456. Ejabberd uses up to three processes per user or server connection.

- *ERL\_MAX\_ETS\_TABLES*

  Sets the maximum number of ETS and Mnesia tables. Default value is 1400 which should be sufficient for a sever without many custom modules. If a message \*\* Too many db tables \*\* appears in ejabberd log files then increase this number.

- *ERL\_OPTIONS*

  With this option, parameters can be passed to **Erlang** interpretor. See **Erlang** documentation for more details on interpreter options.

- *ERL\_FULLSWEEP\_AFTER*

  To reduce memory usage when allowing a large number of connections, *ERL\_FULLSWEEP\_AFTER* may be set to 0 in the options file, but in this case **ejabberd** may start to work slower.

- *ERLANG\_NODE*

  Use specified string as erlang node. It overrides default **ejabberd** node name. The string may take one of the following forms: **nodename**, **nodename@hostname** or **nodename@hostname.domainname**

## FILES

- */etc/ejabberd/ejabberd.cfg*

  default configuration file

- */etc/default/ejabberd*

  default variables

## BUGS

Ejabberd uses distributed Erlang mode to work properly. This means that on start it connects to **epmd** (Erlang port mapping daemon) which is listening at port 4369 and tries to register ejabberd node name. If the connection fails (known failure reasons are unavailability of a loopback interface or firewall issues) Erlang emulator fails to start with not very clear error message. If there's already started Erlang node with the same name (*ejabberd* by default) then ejabberd will also fail with a cryptic error message (in which one can find words *{error,duplicate\_name}*). Another possible case when ejabberd cannot start is incorrect permissions of */var/lib/ejabberd* directory (it must be writable by user ejabberd).

## SEE ALSO

[**erl**(1)](/erl/1.md), [**sasl**(6)](/sasl/6.md), [**ejabberdctl**(8)](/ejabberdctl/8.md), **epmd**.

The program documentation is available at *http://www.process-one.net/en/projects/ejabberd/*.  A copy of the documentation can be found at /usr/share/doc/ejabberd/guide.html.

## AUTHORS

This manual page was adapted by Christophe Romain \<christophe.romain@process-one.net\> and Sergei Golovan \<sgolovan@nes.ru\> for the **Debian** system (but may be used by others) from the **ejabberd** documentation written by Alexey Shchepin \<alexey@sevcom.net\>.

Permission is granted to copy, distribute and/or modify this document under  the terms of the GNU General Public License, Version 2 any   later version published by the Free Software Foundation.

On Debian systems, the complete text of the GNU General Public  License can be found in /usr/share/common-licenses/GPL.
