A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)
A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)
A simple CLI tool for ensuring that a given script runs continuously (i.e. forever). Note that this project currently fully depends on the community for implementing fixes and new features. For new installations we encourage you to use pm2 or nodemon
$ [sudo] npm install forever -g
Note: If you are using forever programmatically you should install forever-monitor.
$ cd /path/to/your/project
$ [sudo] npm install forever-monitor
There are two ways to use forever: through the command line or by using forever in your code. Note: If you are using forever programatically you should install forever-monitor.
You can use forever to run scripts continuously (whether it is written in node.js or not).
Example
forever start app.js
Options
…
There are several examples designed to test the fault tolerance of forever. Here's a simple usage example:
$ forever -m 5 examples/error-on-timer.js
In addition to passing forever the path to a script (along with accompanying options, described above), you may also pass forever the path to a JSON file containing these options. For example, consider an application with the following file structure:
.
├── forever
│ └── development.json
└── index.js
// forever/development.json
{
// Comments are supported
"uid": "app",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/home/myuser/app",
"logFile": "/home/myuser/logs/forever.log",
"outFile": "/home/myuser/logs/out.log",
"errFile": "/home/myuser/logs/error.log"
}
This application could be started with forever, as shown below:
$ forever start ./forever/development.json
Absolute paths to such configuration files are also supported:
$ forever start /home/myuser/app/forever/development.json
Note: Forever parses JSON configuration files using shush, allowing the use of in-line comments within such files.
JSON configuration files can also be used to define the startup options for multiple applications, as shown below.
[
{
// App1
"uid": "app1",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/home/myuser/app1"
},
{
// App2
"uid": "app2",
"append": true,
"watch": true,
"script": "index.js",
"sourceDir": "/home/myuser/app2",
"args": ["--port", "8081"]
}
]
The forever module exposes some useful methods to use in your code. Each method returns an instance of an EventEmitter which emits when complete. See the forever cli commands for sample usage.
Remark: As of [email protected] processes will not automatically be available in forever.list(). In order to get your processes into forever.list() or forever list you must instantiate the forever socket server:
forever.startServer(child);
This method takes multiple forever.Monitor instances which are defined in the forever-monitor dependency.
Synchronously sets the specified configuration (config) for the forever module. There are two important options:
Option Description Default root Directory to put all default forever log filesforever.root
pidPath
Directory to put all forever *.pid files
[root]/pids
sockPath
Directory for sockets for IPC between workers
[root]/sock
loglength
Number of logs to return in forever tail
100
columns
Array of columns to display when format is true
forever.config.get('columns')
debug
Boolean value indicating to run in debug mode
false
stream
Boolean value indicating if logs will be streamed
false
Starts a script with forever. The options object is what is expected by the Monitor of forever-monitor.
Starts a script with forever as a daemon. WARNING: Will daemonize the current process. The options object is what is expected by the Monitor of forever-monitor.
Stops the forever daemon script at the specified index. These indices are the same as those returned by forever.list(). This method returns an EventEmitter that raises the 'stop' event when complete.
Stops all forever scripts currently running. This method returns an EventEmitter that raises the 'stopAll' event when complete.
The format parameter is a boolean value indicating whether the returned values should be formatted according to the configured columns which can set with forever columns or programmatically forever.config.set('columns').
Returns a list of metadata objects about each process that is being run using forever. This method will return the list of metadata as such. Only processes which have invoked forever.startServer() will be available from forever.list()
The format parameter is a boolean value indicating whether the returned values should be formatted according to the configured columns which can set with forever columns or programmatically forever.config.set('columns').
Responds with the logs from the target script(s) from tail. There are two options:
length (numeric): is is used as the -n parameter to tail.stream (boolean): is is used as the -f parameter to tail.Cleans up any extraneous forever *.pid files that are on the target system. This method returns an EventEmitter that raises the 'cleanUp' event when complete.
Removes all log files from the root forever directory that do not belong to current running forever processes. Processes are the value returned from Monitor.data in forever-monitor.
Starts the forever HTTP server for communication with the forever CLI. NOTE: This will change your process.title. This method takes multiple forever.Monitor instances which are defined in the forever-monitor dependency.
By default forever places all of the files it needs into /$HOME/.forever. If you would like to change that location just set the FOREVER_ROOT environment variable when you are running forever:
FOREVER_ROOT=/etc/forever forever start index.js
Make sure that the user running the process has the appropriate privileges to read & write to this directory.
$ npm test