How to Start, Stop and Restart JBoss or WildFly

This guide contains some tips to teach you how to start, stop, restart WildFly application server. By the end of this tutorial, you will be able to effectively manage the lifecycle of your Wildfly server as needed.

First of all, WildFly can be run in two modes: Standalone mode and Domain mode.

Booting WildFly in Standalone mode

You can start WildFly as follows. Move into the bin folder of your installation and run:

$ ./standalone.sh

The above command will start WildFly with the default (standalone.xml) configuration. If you want to provide another configuration available, just pass it as argument:

$ standalone.sh -c standalone-full.xml

The recommended way to stop WildFly is by connecting to it via its management interface (jboss-cli.sh):

$ ./jboss-cli.sh

Then, from there execute:

[standalone@localhost:9990 /] shutdown 

You can restart the application server, passing it as argument to shutdown:

[standalone@localhost:9990 /] shutdown --restart=true 

Finally, you can also specify in a timeout for the shutdown as follows

[standalone@localhost:9990 /] shutdown --timeout=10 

If there is no timeout specified it will wait indefinitely.

Finally, please notice that you can also issue the shutdown command in non-interactive way. For example:

./jboss-cli.sh -c --commands=":shutdown"

Booting WildFly in Domain mode

You can start WildFly Domain as follows. Move into the bin folder of your installation and run:

$ ./domain.sh

Firstly, the recommended way to stop WildFly is by connecting to it via its management interface (jboss-cli.sh):

$ ./jboss-cli.sh

To Stop all servers in a Host:

/host=master:stop  

To restart all servers in a Host:

/host=master:stop(restart=true)  

To Stop a single server in a Host:

/host=master/server-config=server-one:stop

Finally, to restart a single server in a Host:

/host=master/server-config=server-one:stop(restart=true)  

To learn mode about Domain mode we recommend checking this article: WildFly / JBoss Domain configuration

How to start, stop, restart WildFly when the CLI is not available

If you have a Management user, you can still Start, Stop and Restart WildFly using the Web Console which is available at http://localhost:9990

When running in Standalone mode, select the Runtime upper Tab and, from your Server name, click on the Combo Menu’s arrow. You should be able to Reload, Restart or Suspend the Server from there:

start stop and restart jboss wildfly

Much the same way, when running in Domain mode, you can perform the same Management actions on your Domain Host, on Server Groups or on Individual Servers:

start stop and restart jboss wildfly

A Script to restart WildFly Server nodes in Domain Mode

Over time, Java applications can accumulate memory leaks or hold onto unused resources. Therefore, it is fairly common to have a scheduled restart of Application Servers when your applications are not active. For example, during the weekends or at night. Planning a restart of standalone servers is a trivial task as it is just a matter of starting and stopping a process.

In domain mode, if you want to perform a safe restart of your servers, a best practice is to stop and start each server. Therefore, even if there is a limited number of users, they will still be able to use your applications, provided that you have deployed your applications on at least two nodes.

So here is a bash script that you can safely add to your crontab:

CLI="/home/jboss/wildfly-32.0.0.Final/bin/jboss-cli.sh"
HOSTS=$($CLI -c --commands="cd /host, ls")

read -r -a host_array <<< "$HOSTS"

# Loop through the hostcontrollers
for hostcontroller in "${host_array[@]}"; do
   
  echo "HOST: $hostcontroller"
  SERVERS=$($CLI -c --commands="cd /host=$hostcontroller, ls server")
  read -r -a host_servers <<< "$SERVERS"
  # Loop through the servers
  for jbossnode in "${host_servers[@]}"; do
    echo "├── $jbossnode"
    $CLI -c --commands="/host=$hostcontroller/server-config=$jbossnode:stop(blocking=true)"
    if [[ $? -eq 0 ]]; then
       echo "$jbossnode successfully stopped"
    else
       echo "Error when stopping $jbossnode $?"
    fi
    
    sleep 5
    
    $CLI -c --commands="/host=$hostcontroller/server-config=$jbossnode:start(blocking=true)"
    if [[ $? -eq 0 ]]; then
       echo "$jbossnode successfully started"
    else
       echo "Error when starting $jbossnode $?"
    fi
  done 
done

As you can see, all you have to customize is the location of WildFly CLI, Then, it will loop over each Host Controller and then loop through each Server in the Host. You could make it a bit shorter by using the command “/host=$hostcontroller/server-config=$jbossnode:restart(blocking=true)“. However, by using the stop/start command allows some additional tracing of your commands and some extra time to allow closing socket/resources

Managing the lifecycle of WildFly via JMX

Finally, you can also use JMX to manage certain operations such as shutdown or shutdown with restart using JMX.

The simplest way to do that, is to connect to a tool, for example JConsole, and then access the jboss.as:management-root=server MBean. For example, to shutdown the application server:

how to shutdown jboss

Besides, you can also operate through the javax.management and perform the shutdown programmatically. For example:

public static void status() throws Exception{
		String host = "localhost";
		int port = 9990;  // management-http port
		String urlString = "service:jmx:remote+http://" + host + ":" + port;
		System.out.println("\n\n\t****  urlString: "+urlString);;
		JMXServiceURL serviceURL = new JMXServiceURL(urlString);

		Map map = new HashMap();
		String[] credentials = new String[] { "admin", "admin" };
		map.put("jmx.remote.credentials", credentials);
		JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, map);

		MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
		ObjectName mbeanName = new ObjectName("jboss.as:management-root=server");
		connection.invoke(mbeanName, "shutdown", null, null);

		jmxConnector.close();

}

Conclusion

This article was a walk through a set of options to manage the lifecycle of the application server using different tools (CLI / Web Console / JMX API). You should now be able to manage the lifecycle of the server effectively.