Run a shell script and immediately background it, however keep the ability to inspect its output

BashBackground ProcessDaemonGnu ScreenJob Control

Bash Problem Overview


How can I run a shell script and immediately background it, however keep the ability to inspect its output any time by tailing /tmp/output.txt.

It would be nice if I can foreground the process too later.


P.S.

It would be really cool if you can also show me how to "send" the backgrounded process in to a GNU screen that may or may not have been initialized.

Bash Solutions


Solution 1 - Bash

To 'background' a process when you start it

Simply add an ampersand (&) after the command.

If the program writes to standard out, it will still write to your console / terminal.


To foreground the process

Simply use the fg command. You can see a list of jobs in the background with jobs.

For example:

> sh -c 'sleep 3 && echo I just woke up' & jobs


To background a currently running process

If you have already started the process in the foreground, but you want to move it to the background, you can do the following:

  1. Press Ctrl+z to put the current process to sleep and return to your shell. This process will be paused until you send it another signal.
  2. Run the bg command to resume the process, but have it run in the background instead of the foreground.

Solution 2 - Bash

Another way is using the nohup command with & at the end of the line.

Something like this

nohup whatevercommandyouwant whateverparameters &

This will run it in the background and send its output to a nohup.log file.

Solution 3 - Bash

The modern and easy to use approach that allows managing multiple processes and has a nice terminal UI is hapless utility.

Install with pip install hapless (or python3 -m pip install hapless) and just run

$ hap run my-command  # e.g. hap run python my_long_running_script.py
$ hap status  # check all the launched processes
$ hap logs 4  # output logs for you 4th background process
$ hap logs -f 2  # continuously stream logs for the 2nd process

See docs for more info.

ui

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionamerican-ninja-warriorView Question on Stackoverflow
Solution 1 - BashJon WolskiView Answer on Stackoverflow
Solution 2 - BashisraelssView Answer on Stackoverflow
Solution 3 - BashMost WantedView Answer on Stackoverflow