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

= restart-local-instance

[[restart-local-instance-1]][[GSRFM00220]][[restart-local-instance]]

== restart-local-instance

Restarts a running {productName} instance on the host where the
subcommand is run

[[sthref1994]]

=== Synopsis

[source]
----
asadmin [asadmin-options] restart-local-instance [--help]
[--nodedir nodedir] [--node node]
[--debug={false|true}]
[--force={true|false}] [--kill={false|true}]
[instance-name]
----

[[sthref1995]]

=== Description

The `restart-local-instance` subcommand restarts a {productName}
instance on the host where the subcommand is run. This subcommand does
not require secure shell (SSH) to be configured. You must run this
command from the host where the instance resides.

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-instance.html#create-instance-1[`create-instance`(1)] subcommand.

The `restart-local-instance` subcommand does not contact the domain
administration server (DAS) to determine the node on which the instance
resides. To determine the node on which the instance resides, the
subcommand searches the directory that contains the node directories. If
multiple node directories exist, the node must be specified as an option
of the 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-local-instance.html#stop-local-instance-1[`stop-local-instance`(1)]
2. link:start-local-instance.html#start-local-instance-1[`start-local-instance`(1)]

This subcommand is supported in local mode. However, to synchronize the
instance with the DAS, this subcommand must be run in remote mode.

[[sthref1996]]

=== 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.
`--nodedir`::
  Specifies the directory that contains the instance's node directory.
  The instance's files are stored in the instance's node directory. The
  default is as-install``/nodes``.
`--node`::
  Specifies the node on which the instance resides. This option may be
  omitted only if the directory that the `--nodedir` option specifies
  contains only one node directory. Otherwise, this option is required.
`--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 (default).

+
The default is the current setting of this option for the instance
  that is being restarted.
`--force`::
  Specifies whether the instance is forcibly stopped immediately before
  it is restarted. Possible values are as follows:

  `true`;;
    The instance is forcibly stopped immediately (default).
  `false`;;
    The subcommand waits until all threads that are associated with the
    instance are exited before stopping the instance.

`--kill`::
  Specifies whether the instance is killed before it is restarted by
  using functionality of the operating system to terminate the instance
  process. Possible values are as follows:

  `false`;;
    The instance is not killed. The subcommand uses functionality of the
    Java platform to terminate the instance process (default).
  `true`;;
    The instance is killed. The subcommand uses functionality of the
    operating system to terminate the instance process.

[[sthref1997]]

=== 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.

[[sthref1998]]

=== Examples

[[GSRFM740]][[sthref1999]]

==== Example 1   Restarting an Instance Locally

This example restarts the instance `ymlsa1` in the domain `domain1` on
the host where the subcommand is run.

[source]
----
asadmin> restart-local-instance --node localhost-domain1 ymlsa1
Command restart-local-instance executed successfully.
----

[[sthref2000]]

=== Exit Status

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

[[sthref2001]]

=== 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-instance.html#restart-instance-1[`restart-instance`(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)


