27

I have a python based server which i start from the terminal. This particular instance of the terminal then gives control to the program, and the program uses it as a kind of logging window, until its closed. Is this normal, or should i somehow try to start the program some other way in which it will simply show as an active process? If i close the terminal from which i started the program, the program dies with it.

Thank you

U2ros
  • 475
  • 2
  • 6
  • 9
  • PHP is mentioned in this answer but it applies to Python, too: http://askubuntu.com/questions/26555/running-php-cli-server/26565#26565 –  Sep 22 '12 at 13:34

5 Answers5

32

Turn it to a daemon (service)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh

13

Even old bash is using & for sending processes to background, but there is few other ways too .. but basic two are these :

1.)$~ your_command > outputfile_for_stdout &
        # runs your command in background, giving you only PID so you can exit that process by `kill -9 PID_of_process`
        # & goes at the end of row      


2.)$~ your_command > outputfile_for_stdout 
        # this will run your program normally
        # press  Ctrl + Z then program will pause
   $~ bg
        # now your program is running in background
   $~ fg
        # now your program came back to foreground
3.)you can run terminal window under screen command so it will live until you either kill it or you reboot your machine
   $~ screen
   $~ run_all_your_commands
       # Ctrl + A + D will then detach this screen
   $~ screen -r will reattach it

Some other useful commands :

   $~ jobs
        # will show you all processes running right now, but without PID
   $~ ps
        # will show you all processes for actual terminal window
lukassos
  • 146
  • 3
7
$ servicename &

Using & causes the program to run in the background, instead of blocking the shell until the program ends.

Scott Severance
  • 13,776
  • 9
  • 52
  • 76
dixoncx
  • 390
  • 1
  • 8
  • No, it doesn't. Eg. `dixon@dixon-vaio:~$ nautilus & [1] 11835`. It returns process id and you will new shell prompt. Also check this: [http://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and](http://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and). – dixoncx Sep 23 '12 at 13:07
  • 1
    I stand corrected. Down vote removed. – Scott Severance Sep 23 '12 at 17:24
  • And to ignore all output, you can use `servicename &> /dev/null &`. – Marko Jun 03 '23 at 17:12
2

You can also use:

start-stop-daemon -SbCv -x your_command

here is init.d script to start and stop a program in the background.

druss
  • 121
  • 2
0

From the terminal you could also run screen or follow up you command with &. Easy way to run continuous processes.

  • just using `&` to background the process in this case is to little, in my opinion. OP states that his server logs to stdout so, with `&` his terminal will be cluttered with output. Also since OP mentions *closing the terminal*, OP will not be able to foreground the process again and all the log-output will be lost. Better, at least, to redirect it to a log file or stick with the `screen` setup - but then please explain the basics of `screen`to OP (detach/attach/etc) – Robert Riedl Feb 09 '18 at 07:55