一、nohup命令简介
在进行shell脚本编写和运行过程中,可能会存在一些比较耗时的脚本需要在后台持续运行,此时我们可以选择使用nohup命令。nohup命令可以让程序在后台持续运行,即使执行命令的用户退出登录,程序也不会中断,同时nohup命令也可以将程序的输出信息重定向到指定文件,方便后期查看。nohup命令语法如下:
nohup Command [ Arg … ] [ & ]
其中,Command表示要运行的命令或脚本;Arg表示命令中的选项或参数;&表示让命令在后台运行,即nohup命令的标准用法。
二、使用nohup命令运行shell脚本
使用nohup命令运行shell脚本有两种方式,分别是在命令后添加&符号和使用nohup命令。
1.添加&符号的方式
在Linux的操作中,命令后添加&符号表示将命令放到后台,并立即返回控制台,但是如果关闭当前终端,命令也会停止运行。例如,我们有一个名为test.sh的shell脚本,想要在后台运行,可以使用以下命令:
./test.sh &
这样就可以在后台持续运行test.sh脚本了。
2.使用nohup命令的方式
使用nohup命令可以让程序在后台持续运行,即使执行命令的用户退出登录,程序也不会中断。同时nohup命令也可以将程序的输出信息重定向到指定文件,方便后期查看。
例如,我们有一个名为test.sh的shell脚本,想要在后台运行,并将输出信息重定向到test.log文件中,可以使用以下命令:
nohup ./test.sh > test.log 2>&1 &
其中,>表示将输出信息输入到某个文件中,2>&1表示将标准错误输出和标准输出合并。
三、注意事项
虽然使用nohup命令可以让程序在后台持续运行,但是在使用nohup命令的同时还需要注意以下几个事项:
1.输入输出问题
因为nohup命令默认会将程序的输出信息重定向到nohup.out文件中,如果在使用nohup命令之前已经将标准输出或标准错误输出重定向到其他文件中,就需要指定nohup命令的输出文件。否则,nohup命令执行后,原来的输出文件就被清空了,而输出信息不会被记录到任何地方,这样会导致后续难以找到问题。
2.进程名问题
使用nohup命令启动程序后,程序的进程名被设置为nohup。这样在使用ps -ef命令查看进程时,会出现多个进程名为nohup的情况。解决方法是在启动程序时使用重命名参数,例如:
nohup command arg1 arg2 arg3… argN 2>&1 & echo $! > /var/run/command.pid
其中,echo $!将启动程序的进程id输出到/var/run/command.pid文件中。这样在查看进程时即可找到对应进程。
3.修改脚本问题
如果在使用nohup命令后修改了脚本内容,那么在下一次启动所生成的进程,将会运行修改后的脚本,而不是当时使用nohup命令时所运行的脚本。因此,在使用nohup命令后尽量避免修改脚本内容。
四、总结
nohup命令可以让程序在后台持续运行,即使执行命令的用户退出登录,程序也不会中断。同时nohup命令也可以将程序的输出信息重定向到指定文件,方便后期查看。在使用nohup命令时,需要注意程序的输出信息以及进程名问题,并尽量避免修改脚本内容。