Running IQ Server as a Service
The IQ Server can be run as a service or daemon. This ensures that IQ server will restart when the operating system reboots.
Running IQ Server as a service is highly recommended for production instances.
We recommend creating a dedicated user for the IQ Server Service. This user should have limited access.
Linux
The user needs full access rights to the IQ Server installation directory and the sonatypeWork
directory listed in your config.yml.
By default the sonatype work directory is inside the nexus-iq-server folder. The following command can grant a service user permission:
chown -Rv {username} /opt/nexus-iq-server
The command for starting IQ Server can be used in a startup script. Adjust the javaopts
variable to suit the hardware used.
#! /bin/sh cd /opt/nexus-iq-server javaopts="-Xmx4096m -XX:MaxPermSize=128m" java $javaopts -jar nexus-iq-server-*.jar server config.yml 2> stderr.log A running server can be stopped with a simple shutdown script in Shutdown script.
#!/bin/sh pid=`ps aux | grep nexus-iq-server | grep -vE '(stop|grep)' | awk '{print $2}'` kill $pid
Typically these approaches are combined to a service script similar to the script listed in Simplistic Service Script for Unix Systems. Saving this script as e.g. nexus-iq-server lets you to start the server with its log running to the current shell with:
./nexus-iq-server console
To start IQ Server as a background process:
./nexus-iq-server start
To stop running IQ Server as a background process:
./nexus-iq-server stop
This example script can be improved to be more robust against repeat invocations, long running stops, and potentially work better across different Unix flavors, but shows the principal functionality. A similar script can be used for Windows:
#!/bin/sh # The following comment lines are used by the init setup script like the # chkconfig command for RedHat based distributions. Change as # appropriate for your installation. ### BEGIN INIT INFO # Provides: nexus-iq-server # Required-Start: $local_fs $remote_fs $network $time $named # Required-Stop: $local_fs $remote_fs $network $time $named # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: nexus-iq-server service # Description: Start the nexus-iq-server service ### END INIT INFO NEXUS_IQ_SERVER_HOME="/opt/tools/nexus-iq-server" VERSION="[0-9.]*-??" JAVA_OPTIONS="-Xmx4096m -XX:+UseG1GC" # The user ID which should be used to run the IQ Server # IMPORTANT - Make sure that the user has the required privileges to write into the IQ Server work directory. RUN_AS_USER="iqserver" do_start() { _cmd & echo "Started nexus-iq-server" } do_console() { _cmd } do_stop() { pid=`ps aux | grep nexus-iq-server | grep '.jar server' | grep -vE '(stop|grep)' | awk '{print $2}'` kill $pid echo "Stopping nexus-iq-server - PID $pid ($?)" } do_usage() { echo "Usage: nexus-iq-server [console|start|stop]" } _cmd() { cd $NEXUS_IQ_SERVER_HOME || return $? chown $RUN_AS_USER ./stderr.log if [ "$RUN_AS_USER" == "$USER" ]; then java $JAVA_OPTIONS -jar nexus-iq-server-$VERSION.jar server config.yml else sudo -u $RUN_AS_USER java $JAVA_OPTIONS -jar nexus-iq-server-$VERSION.jar server config.yml fi 2> stderr.log } case $1 in console) do_console ;; start) do_start ;; stop) do_stop ;; *) do_usage ;; esac
Setting the above as a startup script will vary between operating systems and distributions depending on the init system used. Generally the script would be copied to a dedicated startup directory and assigned with run-levels and other characteristics for the start up. The following commands show an example on a Debian-based system:
sudo su cp nexus-iq-server /etc/init.d/ cd /etc/init.d update-rc.d nexus-iq-server defaults service nexus-iq-server start
Depending on the requirements from your system administrator, modify the scripts to fit into your environment and exact deployment scenario.
systemd
This example is a script that uses systemd
to run the IQ Server as "iqserver" user. First make sure the necessary user exists. Then create the nexus-iq-server script in /etc/init.d
as described above. Then create a file called nexusiq.service
. Add the following contents, and save the file in the /etc/systemd/system/
directory:
[Unit] Description=Nexus IQ Service After=network-online.target [Service] Type=forking ExecStart=/etc/init.d/nexus-iq-server start ExecStop=/etc/init.d/nexus-iq-server stop User=iqserver Restart=on-abort TimeoutSec=600 [Install] WantedBy=multi-user.target
Activate the service with the following commands:
chmod a+x /etc/init.d/nexus-iq-server sudo systemctl daemon-reload sudo systemctl enable nexusiq.service sudo systemctl start nexusiq.service
Native Linux Installers from the community
There are community provided native installers for Linux available here: nexus-iq-server-installer
These installers setup IQ Server to run as a service. NOTE: These are provided by the community, and not officially supported.