Installation and Administration

Launcher Says It Couldn't Retrieve Process ID

Updated: July 17, 2023

Error Message

[org.nuxeo.launcher.NuxeoLauncher] Sent server start command but could not get process ID.

 

If you got such a message in the console or in the console.log file, that means the Launcher was not able to confirm the server status, retrieving the process id.

Until Nuxeo 5.6, that warning message can also be due to a JVM start failed (for instance, not enough memory). You can check this by running nuxeoctl console instead of nuxeoctl start.

Since Nuxeo 5.7 (NXP-11039), the errors detection and associated messages were improved so that warning message only appears when the Java process is effectively started.

That can be a normal behavior on some old Windows versions and on Unix Solaris.

Windows users, if you can issue the two following commands without error in a Shell windows, then the Launcher must be able to manage the server process on your OS:

wmic quit
taskkill /?

Workarounds

Console Mode

First, you can start in console mode (in which case, the Launcher won't try to manage the process) in order to manually check if the server can start: nuxeoctl console. You will have to stop the server issuing "CTRL+C".

If you can start the server that way, it should also be able to start with nuxeoctl startbg. The drawback is nuxeoctl stop won't be able to stop the server.

Java Commands

In case the issue lies in the batch file, you can try to run the Launcher with its Java command. If you issued nuxeoctl start from a Shell window, then you can copy/paste the command titled "Launcher command". It will be of the form:

Launcher Java command

java -Dlauncher.java.opts="some JVM options" -Dnuxeo.home=/path/to/nuxeo/ -Dnuxeo.conf=/path/to/nuxeo.conf -jar /path/to/nuxeo-launcher.jar start

You can also try to directly run the server, fully bypassing the Launcher. Look into the console.log file for a command titled "Server command". You will have to run the Launcher configuration, then the server command. It will look like:

Run the server, bypassing the Launcher

nuxeoctl configure
java -cp "the classpath" -Dnuxeo.home=/path/to/nuxeo -Dnuxeo.conf=/path/to/nuxeo.conf -Dnuxeo.log.dir=log -Dnuxeo.data.dir=data -Dnuxeo.tmp.dir=tmp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcatalina.base=/path/to/nuxeo -Dcatalina.home=/path/to/nuxeo org.apache.catalina.startup.Bootstrap start

Debugging

Then, if you want to understand the failure cause, you can try to manually get that process ID from a Shell window, reproducing the steps used by the Launcher.

Look into console.log for the "regexp" keyword, this is the regular expression used to find the process ID. Something like:

[org.nuxeo.launcher.NuxeoLauncher] regexp: \Q/path/to/nuxeo.conf\E.*\Qorg.apache.catalina.startup.Bootstrap\E pid:null

The command for retrieving the process ID will depend on your OS.

Linux/Unix

/bin/ps -e -o "pid,args" | grep -E "^\s*([0-9]+)\s+(.*)$" | grep "/path/to/nuxeo.conf.*org.apache.catalina.startup.Bootstrap"

Mac OS X

/bin/ps -e -o "pid,command" | grep -E "^ *([0-9]+) +(.*)$" | grep "/path/to/nuxeo.conf.*org.apache.catalina.startup.Bootstrap"

Windows

wmic process get CommmandLine,ProcessId

Look for lines matching the regular expression: ^(.*?)\\s+(\\d+)\\s*\$

Check if one of those is matching the regular expression found in console.log.