How to correctly run long-running shell commands for Database migrations ✅

Aug 31, 2024When running long-running shell commands, such as database migrations, over an SSH connection, it’s important to ensure the process continues even if your SSH session is interrupted

long-running-shell-tasks

When running long-running shell commands, such as database migrations, over an SSH connection, it’s important to ensure the process continues even if your SSH session is interrupted. There are a few strategies you can use:


Using nohup (No Hang Up)

nohup allows a command to keep running after the session is closed.

Usage:

nohup <your-command> &

Example for a database migration:

nohup python manage.py migrate &

This will redirect the command’s output to a file named nohup.out in the current directory.


Using screen

screen allows you to start a command and then disconnect, leaving the command running in the background.

Start a new screen session:

screen

Run your command inside the screen session:

python manage.py migrate

Detach from the screen session by pressing: Ctrl-A followed by D.

Reattach to the session later using:

screen -r

Using tmux

tmux is similar to screen and is used for managing multiple terminal sessions.

Start a new tmux session:

tmux

Run your command inside the tmux session:

python manage.py migrate

Detach from the tmux session by pressing: Ctrl-B followed by D.

Reattach to the session later using:

tmux attach

Using disown

disown can be used to remove jobs from the shell's job table, allowing them to continue running after the shell session ends.

Run your command in the background:

python manage.py migrate &

Get the job ID of the command using:

jobs

Use disown with the job ID:

disown %1

These methods ensure that your database migrations or any other long-running commands continue to execute even if your SSH session is disconnected.

© Rayan Fernandes. All Rights Reserved.