# Earthworm Modules:
Startstop Overview

(last revised Apr 24, 2015)

This program starts and stops an Earthworm system. It reads its configuration file which specifies the message transport rings to be created, which modules are to be run, and the names of the parameter files each module is to read on startup. The program is system dependent, and there are versions available for the Linux, SUN Solaris and Windows NT operating systems.

For startstop to work, it must know about the Earthworm environment. This is typically done by setting the environment variables within the environment/ew_* file specific to your platform, and then sourcing that file, or executing the cmd if you're on Windows. Startstop typically reads its configuration file from the EW_PARAMS directory (as defined in your environment) and creates the specified rings. It then starts each module as a child process, passing its configuration file name, and any other parameters as its command line paramters (argv, argc). Each module (child process) is started with the priority indicated in startstop*.d. Note that each module and each ring specified must be definined within earthworm.d or earthworm_global.d, which should be in the EW_PARAMS directory. The system continues to run until "quit<cr>" is typed in startstop's command window. Startstop then sets a terminate flag in each transport ring. Each well-behaved module (child process) should periodically check for the terminate flag, and exit gracefully if is set.

Note that two copies of startstop pointing at the same startstop *d file are not allowed to run simultaneously. The second one started will fail and quit. (If you really want to do this for some reason, you'd need to make sure that you use all different rings in the second version, different ports for the modules, and a different startstop*d file, specified as a parameter when starting startstop.)

If the user presses the "Enter" key while the startstop command window is selected, or enters the command "status", startstop will print a status table showing various statistics for each module, including whether it is dead or alive. If a module is dead because it could not be started (for example, the executable's name were mistyped so the executable could not be found), it will be reported as NoExec.

Startstop will also react to 'restart' messages from statmgr. This is part of a scheme wich works as follows: A module may have the token "restartMe" it its .desc file (the file given to statmgr, which tells it how to process exception conditions from that module). If its heartbeat ceases, statmgr will send a restart request to startstop. Startstop will then kill the offending module, and restart it with the same arguments as it did at startup time. There are some system specific features, listed below:

Interactive commands:

Startstop will repond to the following commands from the status console window. There are similar command line versions of each command as well.

- status
  - Startstop will display information about the status of Earthworm, including a listing of the rings and of modules.
  - Within startstop, status can be invoked by hitting the "Enter" key
- restart <pid> or restart <module name>
  - Startstop will send the module a message to exit, and may try and kill it if it doesn't quit by itself in a certain period of time. Next startstop will attempt to start the process back up.
  - Note that the <module name> must be unique for this to work as an argument. The command line version can only accept the pid (Process Id) as an argument.
- stopmodule <pid> or stopmodule <module name>
  - Startstop will send the module a message to exit, and may try and kill it if it doesn't quit by itself in a certain period of time. Startstop will not try to start the process back up, and statmgr shouldn't try to restart it either.
  - Note that the <module name> must be unique for this to work as an argument. The command line version can only accept the pid (Process Id) as an argument.
  - Within startstop, this can be abbreviated to just "stop <pid> or stop <module name>".
  - The command-line "stopmodule" should mark the module as intentionally stopped, showing up as "Stop" in the status listing. This differes from the command line tool "pidpau" which will simply kill a module. It won't be marked as "Stop" so if statmgr is set to monitor and restart this particular module a process killed by "pidpau" will get started back up again. A module stopped by "stopmodule" should not.
  - The module is stopped only for the duration that this startstop session is running! If you want to permanently stop a module, you'll also want to remove it from the startstop*d, and the statmgr.d files so it doesn't get started up next time around.
- reconfigure
  - Startstop will re-read the startstop_nt.d, starstop_unix.d or startstop_sol.d, and allocate any new rings and start up any new modules it finds in the new .d file. In the process it rereads the earthworm.d and earthworm_global.d, in the event that there have been new module IDs or new ring IDs added there.
  - As the final reconfigure step, statmgr is restarted as well so it re-reads it's config file. Any modules that were added to startstop*d should be added to the statmgr.d config file as well.
  - The command line version does the same thing.
  - Within startstop, this can be abbreviated to just "recon".
- quit
  - Starstop will send all child processes (modules) a request to quit, and will kill them if they don't quit within 30 seconds or so. It will then shut itself down.
  - The command line equivalent to "quit" is called "pau".

Solaris, Linux, Mac OS X versions:

- Solaris startstop reads a configuration file named 'startstop_sol.d'
- Mac OS X and Linux startstop reads a configuration file named 'startstop_unix.d'
- If a child process does not exit within a user specified time after the user types "quit<cr>" (or "stopmodule" or "restart"), startstop terminates the child process. Startstop will resort to a more draconian but reliable approach to quiting a module if the standard approach fails, but only if a command to do so is included in the configuration file.
- The amount of CPU time used by each child process is listed in the process status table.
- As of Version 3.0, Startstop can run in background. This modification was made by Pete Lombard at the University of Washington. Instructions
- To run Earthworm as other than root, you must set the file charateristics. Instructions
- For Mac OS X you must adjust the shared memory settings using the /etc/sysctl.conf file and rebooting. We recommend values like this:

    		kern.sysv.shmmax=16777216
    		kern.sysv.shmmin=1
    		kern.sysv.shmmni=32
    		kern.sysv.shmseg=16
    		kern.sysv.shmall=4096

Windows, Windows Service version:

- Windows startstop and Windows startstop service read a configuration file named 'startstop_nt.d'
- If Windows starts up, and, for example, the binary executables for certain modules are missing or are misnamed, startstop will start up anyway. These processes will be shown with a nonexistent negative process ID, and "NoExec" as their status. If this process is restarted once the problem that caused the error has been fixed, the process ID will return to a normal ID, and the status will change to "Alive".
- Startstop can be set to start automatically when Windows boots up, but probably better than doing that is to set startstop as a Windows service. Note that if Startstop is running as a Windows service, other command-line utilities like 'status' and 'restart' are used to monitor and control earthworm modules (since there's no interface to the Startstop service). The StartstopPipeConsole may be used to interact with the service. (With newer versions of Windows, this can be the only way to reach the service.) The Earthworm Startstop service may be started and stopped using the Windows Services Control Panel.
  Module Index | Windows Commands | Solaris Commands | Linux Commands