Hangs when starting

Describe the problem/error/question

What is the error message (if any)?

We are stuck on.

User settings loaded from: /usr/local/n8n/.n8n/config
Initializing n8n process

DEBUG output doesn’t give that much more:

User settings loaded from: /usr/local/n8n/.n8n/config
14:01:46.069   info    Initializing n8n process { "file": "start.js", "function": "init" }
14:01:46.463   debug   Lazy-loading nodes and credentials from n8n-nodes-base { "nodes": 481, "credentials": 384, "file": "lazy-package-directory-loader.js", "function": "loadAll" }
14:01:46.534   debug   Lazy-loading nodes and credentials from @n8n/n8n-nodes-langchain { "nodes": 92, "credentials": 21, "file": "lazy-package-directory-loader.js", "function": "loadAll" }

Running with truss we see it hits a

kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
fstatat(AT_FDCWD,"/usr/local/n8n/.n8n",{ mode=drwxr-xr-x ,inode=169582,size=5,blksize=131072 },0x0) = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 7.230000000 }) = 1 (0x1)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
fstatat(AT_FDCWD,"/usr",{ mode=drwxr-xr-x ,inode=4,size=15,blksize=131072 },AT_SYMLINK_NOFOLLOW) = 0 (0x0)
fstatat(AT_FDCWD,"/usr/local",{ mode=drwxr-xr-x ,inode=5,size=13,blksize=131072 },AT_SYMLINK_NOFOLLOW) = 0 (0x0)
fstatat(AT_FDCWD,"/usr/local/n8n",{ mode=drwxr-xr-x ,inode=34913,size=15,blksize=4096 },AT_SYMLINK_NOFOLLOW) = 0 (0x0)
fstatat(AT_FDCWD,"/usr/local/n8n/.n8n",{ mode=drwxr-xr-x ,inode=169582,size=5,blksize=131072 },AT_SYMLINK_NOFOLLOW) = 0 (0x0)
fstatat(AT_FDCWD,"/usr/local/n8n/.n8n/database.sqlite",{ mode=-rw-r--r-- ,inode=169440,size=0,blksize=131072 },AT_SYMLINK_NOFOLLOW) = 0 (0x0)
getpid()                                         = 87530 (0x155ea)
getpid()                                         = 87530 (0x155ea)
openat(AT_FDCWD,"/usr/local/n8n/.n8n/database.sqlite",O_RDWR|O_NOFOLLOW|O_CREAT|O_CLOEXEC,0644) = 16 (0x10)
fstat(16,{ mode=-rw-r--r-- ,inode=169440,size=0,blksize=131072 }) = 0 (0x0)
fstat(16,{ mode=-rw-r--r-- ,inode=169440,size=0,blksize=131072 }) = 0 (0x0)
fstatat(AT_FDCWD,"/usr/local/n8n/.n8n/database.sqlite",{ mode=-rw-r--r-- ,inode=169440,size=0,blksize=131072 },0x0) = 0 (0x0)
lseek(16,0x0,SEEK_SET)                           = 0 (0x0)
read(16,0x85e316cf0,100)                         = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 7.227000000 }) = 1 (0x1)
_umtx_op(0x2e6b085a1288,UMTX_OP_MUTEX_WAIT,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 0.000000000 }) = 1 (0x1)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 7.217000000 }) = 1 (0x1)
_umtx_op(0x2e6b085a1288,UMTX_OP_MUTEX_WAIT,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf068,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf068,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf020,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf068,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf020,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf020,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b08906580,UMTX_OP_RW_UNLOCK,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b08906580,UMTX_OP_RW_RDLOCK,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b08906580,UMTX_OP_RW_UNLOCK,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b08906580,UMTX_OP_RW_WRLOCK,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf020,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
mmap(0x26110fac0000,520192,PROT_NONE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 41854726729728 (0x2611101e7000)
munmap(0x2611101e7000,102400)                    = 0 (0x0)
munmap(0x261110240000,155648)                    = 0 (0x0)
mprotect(0x261110200000,262144,PROT_READ|PROT_WRITE) = 0 (0x0)
mprotect(0x83a640000,8192,PROT_READ|PROT_WRITE)  = 0 (0x0)
mprotect(0x83a642000,4096,PROT_NONE)             = 0 (0x0)
madvise(0x83a642000,4096,_MADV_DONTNEED)         = 0 (0x0)
mprotect(0x83a643000,245760,PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x83a67f000,4096,PROT_NONE)             = 0 (0x0)
madvise(0x83a67f000,4096,_MADV_DONTNEED)         = 0 (0x0)
mprotect(0x83a643000,245760,PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
socket(PF_INET6,SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK,0) ERR#43 'Protocol not supported'
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 1.957000000 })         = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 0.000000000 }) = 1 (0x1)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 5.108000000 }) = 1 (0x1)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
kevent(9,{ },0,0x8235b85a0,1024,{ 2.000000000 }) ERR#4 'Interrupted system call'
SIGNAL 28 (SIGWINCH) code=SI_KERNEL
sigprocmask(SIG_SETMASK,{ SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGTRAP|SIGABRT|SIGEMT|SIGFPE|SIGKILL|SIGBUS|SIGSEGV|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2 },0x0) = 0 (0x0)
read(4,"*",1)                                    = 1 (0x1)
write(14,"X\M-F\M^G\bk.\0\0\^\\0\0\0\0\0\0"...,16) = 16 (0x10)
write(5,"*",1)                                   = 1 (0x1)
sigreturn(0x8235b7ac0)                           EJUSTRETURN
kevent(9,{ },0,{ 13,EVFILT_READ,0x0,0,0x10,0x0 },1024,{ 1.660000000 }) = 1 (0x1)
read(13,"X\M-F\M^G\bk.\0\0\^\\0\0\0\0\0\0"...,512) = 16 (0x10)
ioctl(11,TIOCGWINSZ,0x8235b78d8)                 = 0 (0x0)
ioctl(15,TIOCGWINSZ,0x8235b78d8)                 = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
kevent(9,{ },0,0x8235b85a0,1024,{ 1.658000000 }) ERR#4 'Interrupted system call'
SIGNAL 28 (SIGWINCH) code=SI_KERNEL
sigprocmask(SIG_SETMASK,{ SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGTRAP|SIGABRT|SIGEMT|SIGFPE|SIGKILL|SIGBUS|SIGSEGV|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2 },0x0) = 0 (0x0)
read(4,"*",1)                                    = 1 (0x1)
write(14,"X\M-F\M^G\bk.\0\0\^\\0\0\0\0\0\0"...,16) = 16 (0x10)
write(5,"*",1)                                   = 1 (0x1)
sigreturn(0x8235b7ac0)                           EJUSTRETURN
kevent(9,{ },0,{ 13,EVFILT_READ,0x0,0,0x10,0x0 },1024,{ 1.409000000 }) = 1 (0x1)
read(13,"X\M-F\M^G\bk.\0\0\^\\0\0\0\0\0\0"...,512) = 16 (0x10)
ioctl(11,TIOCGWINSZ,0x8235b78d8)                 = 0 (0x0)
ioctl(15,TIOCGWINSZ,0x8235b78d8)                 = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 1.407000000 })         = 0 (0x0)
kevent(7,{ },0,{ },1024,{ 4.980000000 })         = 0 (0x0)
_umtx_op(0x2e6b088145c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
kevent(7,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
_umtx_op(0x2e6b085bf020,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 0.000000000 }) = 1 (0x1)
_umtx_op(0x2e6b088122c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
_umtx_op(0x2e6b085bf0c8,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ 0xa,EVFILT_USER,0x0,NOTE_TRIGGER,0,0x0 },1,0x0,0,0x0) = 0 (0x0)
kevent(9,{ },0,{ 0xa,EVFILT_USER,EV_CLEAR,0,0,0x0 },1024,{ 3.092000000 }) = 1 (0x1)
_umtx_op(0x2e6b085a1288,UMTX_OP_MUTEX_WAKE2,0x0,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085a1288,UMTX_OP_MUTEX_WAIT,0x0,0x0,0x0) = 0 (0x0)
kevent(9,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)
kevent(7,{ },0,{ },1024,{ 0.015000000 })         = 0 (0x0)
_umtx_op(0x2e6b088145c8,UMTX_OP_NWAKE_PRIVATE,0x1,0x0,0x0) = 0 (0x0)
_umtx_op(0x2e6b085bf020,UMTX_OP_WAIT_UINT_PRIVATE,0x0,0x0,0x0) = 0 (0x0)
kevent(7,{ },0,{ },1024,{ 0.000000000 })         = 0 (0x0)

After init, n8n loads its configuration and SQLite DB:
You can see openat calls successfully opening the config and database.sqlite. The database is accessible, so this isn’t a file permissions or missing dependency issue.

No TCP Listening Socket:
Despite getting to the “Initializing n8n process” and loading all node modules, there’s no evidence in the truss output of a successful bind() or listen() call on TCP:5678 (or any other port).
A healthy process should make a socket() and bind() call here—your only socket call is a failing IPv6 attempt (ERR#43 ‘Protocol not supported’), but nothing for IPv4.

Endless kevent()/umtx_op() Loop:
After SQLite access, the process loops endlessly on kevent() and _umtx_op() syscalls, which is typical of Node.js apps waiting on events or threads.
In practice, this means n8n is blocked in its event loop—but not progressing to starting the HTTP server.

No Obvious Crash/Exit:
Unlike your previous attempts (segfaults, etc.), this time there’s no crash or error—just an eternal “waiting” state.

Other Apps Bind Fine:
A Python test server binds to TCP:5678 without issue, and SSHD binds to :22, so it’s not a jail networking problem.

Please share your workflow

N8N_HOST=0.0.0.0 N8N_PORT=5678 N8N_LOG_LEVEL=debug n8n start
N8N_HOST=0.0.0.0 N8N_PORT=5678 N8N_LOG_LEVEL=debug truss n8n start
N8N_HOST=10.3.3.21 N8N_PORT=5678 N8N_LOG_LEVEL=debug n8n start
N8N_HOST=127.0.0.1 N8N_PORT=5678 N8N_LOG_LEVEL=debug n8n start

Share the output returned by the last node

User settings loaded from: /usr/local/n8n/.n8n/config
Initializing n8n process

Information on your n8n setup

  • n8n version:
    1.97.1

  • Database (default: SQLite):
    npm package version 5.1.7

  • n8n EXECUTIONS_PROCESS setting (default: own, main):
    Default (main)
    Note: Also tried with N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true and other variants—same result.

  • Running n8n via (Docker, npm, n8n cloud, desktop app):
    npm

  • Operating system:
    FreeBSD 14.2-RELEASE [gaol]

Similar to:

1 Like