Most of the
time you login into remote server via ssh. If you start a shell script or
command and you exit (abort remote connection), the process / command will get
killed. Sometime job or command takes a long time. If you are not sure when the
job will finish, then it is better to leave job running in background. But, if
you log out of the system, the job will be stopped and terminated by your
shell. What do you do to keep job running in the background when process gets
SIGHUP?
nohup command line-utility which allows to run
command/process or shell script that can continue running in the background
after you log out from a shell:
nohup
command syntax:
The syntax
is as follows
nohup
command-name &
OR
nohup
/path/to/command-name arg1 arg2 &
Where,
command-name
: is name of shell script or command name. You can pass argument to command or
a shell script.
& :
nohup does not automatically put the command it runs in the background; you
must do that explicitly, by ending the command line with an & symbol.
Use jobs -l
command to list all jobs:
# jobs -l
nohup
command examples
First, login
to remote server using ssh command:
$ ssh
user@remote.server.com
OR
$ ssh
rajesh@linuxforfreshers.com
I am going
to execute a shell script called ftp.sh:
# nohup ftp.sh
&
Type exit or
press CTRL + D exit from remote server:
# exit
In this
example, I am going to find all programs and scripts with setuid bit set on,
enter:
# nohup find
/ -xdev -type f -perm +u=s -print > out.txt &
Type exit or
press CTRL + D exit from remote server.
# exit
Please note
that nohup does not change the scheduling priority of COMMAND; use nice command
for that purpose. The syntax is:
# nohup nice
-n -5 ls / > out.txt &
As you can
see nohup keep processes running after you exit from a shell. Read man page of
nohup(1) and nice(1) for more information. Please note that nohup is almost
available on Solaris/BSD/Linux/UNIX variants.