Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

nohup vs screen -- which is better for long running process?

Tags:

Background: I have a long running script that makes database schema changes that has output I would want to check after the migration. I would want to write this to a file.

I have been reading stack overflow about nohup and screen. I have tried both and have concerns about both.

IN: How to run process as background and never die?

They said they used nohup and putty killed the process. How is this possible? I have been unable to replicate using Mac OS X terminal.

With screen I am terrified of typing exit instead of ctrl + a, d

Also If I just quit the terminal app when using screen, it seems to preserve the state.

Screen seems to be the better solution because it is really nifty how you can have a bunch of them open and switch back to the state.

What would you recommend in my situation? I don't have the run the script for another month or so (When I have a release). Should I become more comfortable with screen and just stick with that?

like image 555
Chris Muench Avatar asked Dec 24 '13 20:12

Chris Muench


People also ask

What is the difference between a process run with & and one run with nohup?

Either of these actions normally prompts the kernel to hang up on the application, but a nohup wrapper will allow the process to continue. Using the ampersand will run the command in a child process and this child of the current bash session.

Why do we need nohup?

Nohup command is used to prevent an important process from being terminated when you log out or close the session. It helps a lot when you are running a process, especially scripts that take a long time to complete.

Does nohup run in background?

The nohup command can also be used to run programs in the background after logging off. To run a nohup command in the background, add an & (ampersand) to the end of the command.

How does nohup check background process?

Run ping command with nohup command. Re-open the terminal and run pgrep command again. You will get the list of the process with process id which is running. You can stop any background process by running kill command.


1 Answers

Both have there own + and - :

nohup:

  1. nohup is good to use for running procs in background when proc don't need any user input like httpd server or any other server proc like that.
  2. nohup does create log in dir of proc execution. log file name default is nohup.out
  3. It avoids proc getting killed due to mistaken ctrl+C , ctrl+D . Just a safe guard.
  4. It's normally installed by default with basic setup. No need to install separately like screen.
  5. It's functionality is very specific to running a job in background and dumping output. Low memory intensive.

screen:

  1. Got to install separately. You can NOT go to a data center or login to
    any box and expect screen is present.
  2. Good to manage multiple terminals on separate subjects and give them name.
  3. Its more of terminal manager and not a command to run a proc for infinite time like nohup.
  4. It's more suitable if proc need user input. Like install
    scripts, yes/no prompts.
  5. With tones of features, comes it's memory. But agreed, some are really great features.

To conclude, both are two different things made with different agendas so comparison is difficult.

Cheers!

like image 132
mrtipale Avatar answered Sep 20 '22 17:09

mrtipale