How to use the command 'forever' (with examples)
The forever
command is a robust server-side tool designed to ensure that Node.js applications run continuously. It’s particularly useful for maintaining the uptime of applications, as it automatically restarts them in the event of a crash or exit, akin to a watchdog process. This is essential in production environments where application reliability and availability are critical. With forever
, developers can manage their Node.js applications efficiently, restarting them when necessary, listing running processes, or stopping them gracefully when required.
Use case 1: Start running a file forever (as a daemon)
Code:
forever start myScript.js
Motivation:
This use case is pivotal for developers who want to ensure that their Node.js application runs continuously without manual intervention. By running a script as a daemon, the process is detached from the terminal, allowing the server to operate independently. This is particularly valuable in production environments where uptime is crucial, as it minimizes downtime risks by automatically rebooting the application in case of failure.
Explanation:
forever
: This is the command line tool that manages the application lifecycle, ensuring it remains running indefinitely.start
: This argument initiates the given script as a background service, effectively making it a daemon.myScript.js
: This represents the Node.js script that you want to run continuously. It could be any script that runs a service such as a web server, a background worker, or a real-time application.
Example Output:
Upon successful execution, the command might output something similar to:
info: Forever processing file: myScript.js
This indicates that myScript.js
is now being managed by forever
and will be restarted automatically in case of unexpected exits.
Use case 2: List running “forever” processes (along with IDs and other details)
Code:
forever list
Motivation:
Listing all the running processes managed by forever
is crucial for monitoring and managing multiple applications or instances. This allows developers and system administrators to gain insight into the applications’ statuses, including whether they are running smoothly or if any require attention or debugging.
Explanation:
forever
: Again, this is the main tool used to manage the lifecycle of Node.js applications.list
: This argument promptsforever
to display all currently managed processes. It provides useful information such as the process ID (pid), uptime, command used, and the script’s location.
Example Output:
The output for this command would typically look like:
info: Processes running forever
data: uid command script forever pid id logfile uptime
data: [0] ABC node myScript.js 12345 2345 /root/.forever/ABC.log 1:45:30:20.123
This output provides essential details that can help in managing and diagnosing your applications.
Use case 3: Stop a running “forever” process
Code:
forever stop myScript.js
Motivation:
Stopping a running process is a fundamental maintenance operation, essential when you need to update, debug, or redeploy an application. It allows for controlled shutdowns of applications without abruptly terminating processes, which could potentially lead to data loss or corruption.
Explanation:
forever
: The command line interface used for managing Node.js applications.stop
: This command stops the application managed byforever
. It’s used when changes or investigations are required that cannot be performed while the application is running.myScript.js
: This is the specific node script or process you intend to stop. You can alternatively use the unique ID or pid provided in theforever list
to specify which process to stop.
Example Output:
Upon successful stopping of the process you’ll see output similar to:
info: Forever stopped process:
data: uid command script forever pid id logfile
data: [0] ABC node myScript.js 12345 2345 /root/.forever/ABC.log
This feedback confirms that the designated process has been successfully stopped.
Conclusion:
The forever
tool is an invaluable asset for anyone running Node.js applications, especially in production environments. Its capabilities to keep applications running without downtime, insight into running applications, and ability to gracefully shutdown processes provides robust administration. By leveraging these use cases, developers can ensure their applications are up, running efficiently and managed effectively.