type=page
status=published
title=restart-instance
next=restart-local-instance.html
prev=restart-domain.html
~~~~~~

= restart-instance

[[restart-instance-1]][[GSRFM00219]][[restart-instance]]

== restart-instance

Restarts a running {productName} instance

[[sthref1986]]

=== Synopsis

[source]
----
asadmin [asadmin-options] restart-instance [--help]
[--debug={false|true}] instance-name
----

[[sthref1987]]

=== Description

The `restart-instance` subcommand restarts a running {productName}
instance. This subcommand requires secure shell (SSH) to be configured
on the machine where the domain administration server (DAS) is running
and on the machine where the instance resides.

[NOTE]
====
SSH is not required if the instance resides on a node of type `CONFIG`
that represents the local host. A node of type `CONFIG` is not enabled
for communication over SSH.
====

You may run this subcommand from any machine that can contact the DAS.

The subcommand can restart any {productName} instance, regardless of
how the instance was created. For example, this subcommand can restart
an instance that was created by using the
link:create-local-instance.html#create-local-instance-1[`create-local-instance`(1)]
subcommand.

When this subcommand restarts an instance, the DAS synchronizes the
instance with changes since the last synchronization as follows:

* For the `config` directory, the DAS synchronizes the instance with all changes.
* For the `applications` directory and `docroot` directory, only a
change to a top-level subdirectory causes the DAS to synchronize all
files under that subdirectory.
+
If a file below a top level subdirectory is changed without a change to
a file in the top level subdirectory, full synchronization is required.
In normal operation, files below the top level subdirectories of these
directories are not changed. If an application is deployed and
undeployed, full synchronization is not necessary to update the instance
with the change.

If different synchronization behavior is required, the instance must be
stopped and restarted by using following sequence of subcommands:

1. link:stop-instance.html#stop-instance-1[`stop-instance`(1)]
2. link:start-instance.html#start-instance-1[`start-instance`(1)]

This subcommand is supported in remote mode only.

[[sthref1988]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--debug`::
  Specifies whether the instance is restarted with
  http://java.sun.com/javase/technologies/core/toolsapis/jpda/[Java
  Platform Debugger Architecture
  (JPDA)](http://www.oracle.com/technetwork/java/javase/tech/jpda-141715.html)
  debugging enabled. Possible values are as follows:

  `true`;;
    The instance is restarted with JPDA debugging enabled and the port
    number for JPDA debugging is displayed.
  `false`;;
    The instance is restarted with JPDA debugging disabled.

+
The default is the current setting of this option for the instance
  that is being restarted.

[[sthref1989]]

=== Operands

instance-name::
  The name of the {productName} instance to restart. If the instance
  is not running, the subcommand displays a warning message and attempts
  to start the instance.

[[sthref1990]]

=== Examples

[[GSRFM739]][[sthref1991]]

==== Example 1   Restarting a {productName} Instance

This example restarts the {productName} instance `pmdsa1`.

[source]
----
asadmin> restart-instance pmdsa1
Instance pmdsa1 was restarted.

Command restart-instance executed successfully.
----

[[sthref1992]]

=== Exit Status

0::
  command executed successfully
1::
  error in executing the command

[[sthref1993]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:create-instance.html#create-instance-1[`create-instance`(1)],
link:create-local-instance.html#create-local-instance-1[`create-local-instance`(1)],
link:delete-instance.html#delete-instance-1[`delete-instance`(1)],
link:delete-local-instance.html#delete-local-instance-1[`delete-local-instance`(1)],
link:restart-local-instance.html#restart-local-instance-1[`restart-local-instance`(1)],
link:setup-ssh.html#setup-ssh-1[`setup-ssh`(1)],
link:start-instance.html#start-instance-1[`start-instance`(1)],
link:start-local-instance.html#start-local-instance-1[`start-local-instance`(1)],
link:stop-instance.html#stop-instance-1[`stop-instance`(1)],
link:stop-local-instance.html#stop-local-instance-1[`stop-local-instance`(1)]

Java Platform Debugger Architecture (JPDA)
(http://www.oracle.com/technetwork/java/javase/tech/jpda-141715.html)


