Have you ever needed to keep a shell command running after logging out or closing the terminal? This tutorial will walk you through numerous ways to make sure your commands continue to run, whether you’re managing long-running tasks, continuous services, or you need to disconnect from a server.
Linux offers a suite of commands like nohup, screen, disown, at, and tmux each designed for specific process and session management tasks. These commands vary in functionality, from simple background tasks to advanced session control. The right choice depends on the task complexity and the required level of process interaction. Understanding these commands is key to effective and efficient management of tasks in a Linux environment. Please have a look at the below table to have an idea before doing those commands:
|1. Running long-running processes that you don’t need to interact with after starting.
2. Basic background execution without the need for script or command interaction.
|1. Does not allow you to reattach to the session.
2. Not suitable for interactive applications.
|1. Managing multiple command-line sessions from a single terminal.
2. Detaching and reattaching to terminal sessions, useful for long-running processes, especially over SSH.
|1. Slightly more complex to use compared to nohup.
2. Not as modern or feature-rich as tmux.
|1. Similar to nohup, but used for processes already started.
2. Useful for disassociating running jobs from the current shell without ending them.
|1. Specific to bash shell.
2. Does not allow reattaching to the session.
|1. Handling multiple terminal sessions within a single window.
2. Detaching and reattaching to sessions, with a more user-friendly interface and advanced features compared to
3. Useful for long-running jobs, collaborative work, and session management.
|1. Requires learning its command syntax and shortcuts.
2. Might be overkill for simple background job management.
Using nohup Command
The “No Hang UP” command, or nohup, is an essential tool for any Linux user’s toolbox. It permits a command to carry on in the background, guaranteeing the uninterrupted operation of your procedure.
nohup command &
command with your desired command. For example, to run a Bash script in the background:
nohup ./script.sh &
By default, output is redirected to
nohup.out. To change this:
nohup command > outputfile.txt 2>&1 &
Utilizing screen Command
The screen command is ideal for preserving processes after disconnecting since it offers detachable shell sessions. Install it on your machine first:
sudo apt-get install screen
sudo yum install screen
After successful installation of the screen utility, Start
screen, run your command, and then detach using
Ctrl-D. To reattach:
screen -r [session-id]
Leveraging tmux Command
Similar to screen, tmux offers robust terminal session management. Install it as follows:
sudo apt-get install tmux
sudo yum install tmux
Start tmux with
tmux, run your command, and detach with
D. To reattach:
tmux attach-session -t [session-name]
Scheduling with at Command
The at command schedules command for future execution, independent of your terminal session. Install it using:
sudo apt-get install at
sudo yum install at
After installing at utility, use it with the following commands:
echo "command" | at [time]
command with your desired command. For example, to run a Python script in the background for the next 2 minutes:
echo "python script.py" | at now + 2 minutes
Using disown Command
The “disown” command allows a job to remain in the background by removing it from the job table. You can quickly make sure your process never stops by using this built-in command.
Start a job (
command &) and then use
disown to remove it from the job table.
Each method described above offers unique features for keeping shell commands running after terminal exit. Experiment with these techniques to find which best suits your needs.