Introduction:
When working on a Linux server, it's common to run processes that need to continue even after you log out or close the terminal. The nohup
command (short for "no hangup") is a simple yet powerful tool that lets you run processes independently from the terminal session. In this post, we’ll explore what nohup
does, how it works, and common use cases for running commands in the background.
What is nohup?
nohup
is a command-line utility that prevents a process from being terminated when the user logs out or the terminal session is closed. It essentially ignores the "HUP" (hangup) signal, allowing the process to continue running in the background.
How to Use nohup:
The basic syntax for using nohup is:
nohup command [args] &
nohup
: Tells the system to ignore the hangup signal.command
: The command or process you want to run (e.g., a script, server, or any long-running process).&
: Runs the process in the background, freeing up the terminal for other tasks.
Example 1: Running a Script in the Background
Suppose you have a long-running script called backup.sh
. You want it to continue running after you log out from the server:
nohup ./backup.sh &
The command will:
- Run the
backup.sh
script in the background. - Ignore terminal hangup signals.
- Output the script's logs into a file called
nohup.out
.
Example 2: Running a Node.js App
Let’s say you have a Node.js application called app.js
. You can run it in the background using nohup
:
nohup node app.js &
This allows the Node.js application to continue running, even after the user logs out of the terminal.
Viewing Logs
When you run a command with nohup
, it automatically redirects the output (both standard output and errors) to a file named nohup.out
. To view the output, you can use the following command:
tail -f nohup.out
This will display the output of the running process in real time.
Redirecting Output to a Specific File
If you want to redirect the output to a custom log file instead of nohup.out, you can do so by specifying the file location:
nohup command > customlogfile.log 2>&1 &
In this example:
customlogfile.log
: is the file where both output and errors are logged.2>&1
: combines standard error with standard output, ensuring everything is logged in the same file.
Example 3: Redirecting Output
To run a Python script and save the output in a specific log file, use:
nohup python3 myscript.py > myscript.log 2>&1 &
This command will:
- Run
myscript.py
in the background. - Save both the output and error messages to
myscript.log
.
Use with disown to Fully Detach Processes
After starting a background process with nohup
, it is still associated with your shell session. To fully detach the process, use disown
:
nohup command &
disown
This combination ensures that even if the shell session is closed, the process continues to run.
Use Cases for nohup
:
- Running Servers: If you’re starting a server (like Apache, Node.js, or Python HTTP servers),
nohup
allows the server to keep running even when you disconnect from the terminal. - Long-Running Scripts: For tasks such as data backups, batch processing, or cron jobs that take time,
nohup
ensures these processes don’t stop halfway if the session ends. - Background Jobs: You can use
nohup
to run processes that don’t need constant monitoring but need to stay active.
Conclusion:
The nohup
command is a simple yet effective tool for keeping processes running in the background on Linux servers. Whether you're running long scripts or managing web servers, using nohup ensures that your processes won’t be interrupted when you log out or close your terminal. Combine it with other commands like &
and disown
for maximum flexibility.