您的位置:

使用nohup命令在后台持久运行Shell脚本

一、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命令时,需要注意程序的输出信息以及进程名问题,并尽量避免修改脚本内容。